C ++线程可以暂停并存储其上下文以出租给另一个线程吗? (线程ID借用)

C ++线程A可以通过将“暂停” P存储在一个对象中,然后在另一个线程B中使用该对象在线程A中运行函数F来暂停执行吗?

B可以使用P来解锁A拥有的互斥锁。或者F可以锁定已经由A锁定的递归互斥锁,这可以安全地完成(与只有回叫时才是递归锁定方案一样安全),因为:

  • 该过程是完全合作的
  • 真实的A不在运行,而F的运行则是B在“在A中运行”,因此只有一个执行具有锁。

[当然,以无序方式进行操作显然是不安全的,就像进行任意回调时所持有的任何递归锁一样(不知道该锁已被持有并且会误解能够锁定,认为互斥锁没有作用”) t锁定)或非递归互斥锁(可能尝试锁定已锁定的互斥锁并导致死锁或导致错误),或者实质上是涉及在调用带锁的回调中等待资源的任何情况。]

由于线程不能与其自身并行运行,因此A仅在销毁P后才能重新启动。

这里的要点是,不应该涉及OS,而应该仅涉及C ++运行时:F将立即在OS线程B中运行,而不是安排执行。操作系统线程B仍将在运行,但将作为线程A执行。

换句话说, C ++线程可以合作方式交换身份吗?

amianmian 回答:C ++线程可以暂停并存储其上下文以出租给另一个线程吗? (线程ID借用)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2998238.html

大家都在问