C++ 线程 A 是否可以通过将“暂停”P 存储在一个对象中来暂停其执行,然后该对象可以在另一个线程 B 中使用以在线程 A 中运行函数 F?
B 可以使用 P 来解锁 A 拥有的互斥锁。或者 F 可以锁定已经被 A 锁定的递归互斥锁,这可以安全地完成(与只有当您有回调时的递归锁定方案一样安全),因为:
- 这个过程纯粹是合作的
- 真正的 A 没有运行,而 F run be B 在“A 中”运行,所以只有一个执行有锁
[当然,当以一种无序的方式完成时,它显然是不安全的,就像在进行任意回调时持有的任何递归锁一样(不知道锁已经被持有并且误解了能够锁定,认为互斥锁没有被锁定)或非递归互斥体(可能会尝试锁定已锁定的互斥体和死锁或导致错误),或者本质上涉及在使用锁调用的回调中等待资源的任何场景。]
因为线程不能与自身并行运行,所以 A 只能在 P 被销毁后重新启动。
这里的重点是操作系统不应该参与其中,只有 C++ 运行时:F 会立即在操作系统线程 B 中运行,而不是被安排执行。操作系统线程 B 仍将运行,但作为线程 A 执行。
换句话说,C++ 线程能否以合作的方式交换身份?