我正在考虑某种类型的同步原语,但我不知道调用了这种类型的同步,或者如果这样的事情会起作用。没有等待的并发代码
所以有一个变量(布尔),它基本上表示一个线程是否仍在一块内存上工作。在开始时,bool被设置为false
,这意味着工作线程不在你的内存块上工作。现在主线程给工作线程一个“todo-list”,描述它应该如何处理这块内存。之后,它将布尔状态更改为true
,以便工作线程知道现在可以完成其工作。主线程现在可以继续其自己的工作,并在某些位置检查工作线程是否已经完成工作,例如,如果布尔值已被设置为false
。如果是stil true
,主线程只是继续自己的工作,并不等待工作线程。如果布尔值为false
,则主线程知道工作线程已完成并开始处理内存块。
所以布尔值只是将所有权转移给两个线程之间的内存块。如果一个线程当前没有该内存的所有权,那么它就继续自己的工作,并且如果它现在再次拥有所有权,则重复检查。这样,没有一个线程正在等待另一个线程并且可以继续自己的工作。
这是什么叫,以及如何实现这样的行为?
编辑:基本上它是一个互斥体。但与其等待互斥锁再次解锁,它将继续/跳过关键代码。
这可能是'std :: future'和/或'std :: packaged_task'的好例子。 – amuttsch
定期检查某些外部事件时做自己的工作称为“轮询”。它可以用一个原子变量来实现。这通常不是一个好主意。 –
你能解释一下为什么吗? –