Can a C++ thread A suspend its execution by storing that "pause" P in an object that can then be used in another thread B to run a function F in thread A?
(C ++线程A是否可以通过将“暂停” P存储在对象中来中止执行,然后将该对象在另一个线程B中用于在线程A中运行函数F?)
B could use P to unlock a mutex owned by A. Or F could lock a recursive mutex that was already locked by A, which is can be done safely (as safely as only recursive locking scheme when you have call backs) because:
(B可以使用P来解锁A拥有的互斥锁。或者F可以锁定已经由A锁定的递归互斥锁,这可以安全地完成(与只有回叫时的递归锁定方案一样安全),因为:)
[Of course it's patently unsafe when done in a disorderly way, exactly like any recursive lock held while doing arbitrary call backs (that don't know the lock is already held and misinterpret being able to lock, thinking the mutex wasn't locked) or non recursive mutexes (might try to lock an already locked mutex and deadlock or cause an error), or essentially any scenario involving wait for a ressource in a call back called with a lock.]
([当然,以无序的方式进行操作显然是不安全的,就像在执行任意回调时所持有的任何递归锁一样(不知道该锁已被持有并且会误认为能够锁定,以为互斥锁未锁定)或非递归互斥锁(可能试图锁定已锁定的互斥锁和死锁或导致错误),或者实质上是涉及在调用带锁的回调中等待资源的任何情况。)
Because a thread cannot run in parallel with itself, A would could only restart once P is destroyed.
(由于线程无法与其自身并行运行,因此A仅在销毁P后才能重新启动。)
The point here is that the OS shouldn't get involved, only the C++ runtime : F would run immediately in OS thread B, not be scheduled for execution.
(这里的要点是, 操作系统不应该参与其中,只有C ++运行时 :F会立即在操作系统线程B中运行,而不是安排执行。)
The OS thread B would still be running, but executing as thread A. (OS线程B仍将在运行,但将作为线程A执行。)
In other words, can C++ threads exchange identity in a cooperative way?
(换句话说, C ++线程可以以协作方式交换身份吗?)
ask by curiousguy translate from so 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…