我有第三方代码,它使用这样的代码创建了很多线程:
while (true) {
{
my::Lock lock(&mMutex); // mutex implementation in c++
if (!reseting) {
// some code
break;
}
}
usleep(1000 / 20); // 20 time per second
}
我可以用
semaphore
重写这段代码.用什么,semaphore
或 sleep
?据我了解,它们的工作方式相同。 Semaphore
工作会快一点,因为我们可以立即继续 thread
当reset
被改变。或者也许你有另一个想法如何更好地做到这一点?
my::Lock
的实现:Lock::Lock(pthread_mutex_t *mutex) {
_mutex = mutex;
pthread_mutex_lock(_mutex);
}
Lock::~Lock() {
pthread_mutex_unlock(_mutex);
}
最佳答案
您是正确的,轮询是一种低效的方法。这种互斥锁实现只会使情况变得更糟。
你问信号量是否可能是更好的模式:它可能是,但我怀疑你可以做得更好。具体来说,我想到了三种异步模式:
delegate
属性来指定通知谁和定义delegate
的方法的协议(protocol)可能或必须实现。这是一种有用的模式,用于通信更新的接口(interface)更复杂(例如,不仅是在任务完成时,还可能是各种进度更新)。 NSNotificationCenter
通知其他对象状态更改)。如果有可能不止一个对象想要获知任务的完成,这将很有用。 坦率地说,选择可能取决于这个第三方库的细节。很难根据提供的信息进行评估。
关于objective-c - 后台线程的 sleep 或信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30374206/