我有两个线程,一个在紧密循环中工作,另一个偶尔需要与第一个执行同步:
// thread 1
while(1)
{
lock(work);
// perform work
unlock(work);
}
// thread 2
while(1)
{
// unrelated work that takes a while
lock(work);
// synchronizing step
unlock(work);
}
我的意图是线程 2 可以通过获取锁有效地暂停线程 1 并执行必要的同步。线程 1 也可以通过解锁来暂停,如果线程 2 没有等待锁定,则重新锁定并返回工作。
我遇到的问题是互斥锁不公平,所以线程 1 快速重新锁定互斥锁并饿死线程 2。我尝试使用pthread_yield
,到目前为止它似乎运行正常,但我不确定它是否适用所有系统/核心数。有没有办法保证线程 1 总是让给线程 2,即使在多核系统上也是如此?
处理此同步过程的最有效方法是什么?