From: nobu@... Date: 2015-12-29T22:58:06+00:00 Subject: [ruby-core:72604] [Ruby trunk - Misc #11904] [Rejected] Why was Thread.exclusive deprecated? Issue #11904 has been updated by Nobuyoshi Nakada. Status changed from Open to Rejected This use of `Thread.exclusive` seems nonsense. https://github.com/cryptosphere/rbnacl/commit/25444979d161fa0f02a61a5003768c2173cfa2ee While `Thread.exclusive` stops all other threads in 1.8 and earlier, it just blocks other threads which also calling it. If no other threads calls it, it is useless. ---------------------------------------- Misc #11904: Why was Thread.exclusive deprecated? https://bugs.ruby-lang.org/issues/11904#change-55854 * Author: Tony Arcieri * Status: Rejected * Priority: Normal * Assignee: ---------------------------------------- See: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/52554 Why was Thread.exclusive deprecated? It is useful for when you're uncertain about whether the caller is multithreaded or not, and therefore cannot initialize a mutex because the mutex must be initialized in a thread-safe context where it's not possible for multiple caller threads to initialize the mutex concurrently. One use case is here: this is an idempotent native function invoked via FFI. The contract is that it can be called repeatedly, but only by one thread at a time (concurrent calls from multiple threads can potentially corrupt its internal state): https://github.com/cryptosphere/rbnacl/blob/master/lib/rbnacl.rb#L88 Thread.exclusive is useful because it provides an implicit mutex you can ensure is initialized correctly before any other threads start. -- https://bugs.ruby-lang.org/ Unsubscribe: