WebServer
WebServer copied to clipboard
程序加锁的问题
下面这两个函数,第一个函数加锁后,然后一直等待条件变量。第二个函数执行时,由于第一个函数占用了锁,所以根本无法给loop_变量赋值以及唤醒条件变量,所以这样是不是会造成死锁。但是程序的确又是在正常运行,所以比较困惑,求指教。 EventLoop* EventLoopThread::startLoop() { assert(!thread_.started()); thread_.start(); { MutexLockGuard lock(mutex_); while (loop_ == NULL) cond_.wait(); } return loop_; }
void EventLoopThread::threadFunc() { EventLoop loop;
{
MutexLockGuard lock(mutex_);
loop_ = &loop;
cond_.notify();
}
loop.loop();
//assert(exiting_);
loop_ = NULL;
}
cond_.wait() 会释放锁,没有占用锁的
cond_.wait() 会释放锁,没有占用锁的
谢谢提醒,看了下资料,的确是cond_wait在使用前必须加锁,wait执行完后,会解锁。太感谢了