WebServer icon indicating copy to clipboard operation
WebServer copied to clipboard

程序加锁的问题

Open huster-mr opened this issue 6 years ago • 2 comments

下面这两个函数,第一个函数加锁后,然后一直等待条件变量。第二个函数执行时,由于第一个函数占用了锁,所以根本无法给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;

}

huster-mr avatar Jun 03 '19 03:06 huster-mr

cond_.wait() 会释放锁,没有占用锁的

linyacool avatar Jun 03 '19 04:06 linyacool

cond_.wait() 会释放锁,没有占用锁的

谢谢提醒,看了下资料,的确是cond_wait在使用前必须加锁,wait执行完后,会解锁。太感谢了

huster-mr avatar Jun 03 '19 08:06 huster-mr