【发布时间】:2015-06-19 10:39:46
【问题描述】:
我是 SO 的初学者,所以如果问题不清楚,请告诉我。
我正在使用两个线程,例如 A 和 B。我有一个全局变量“p”。 线程 A 正在循环并增加 'p' 的值。同时 B 试图将 'p' 设置为其他值(两者都是两个不同的线程函数)。
如果我使用互斥锁进行同步,并且线程 A 获取互斥锁并在 while 循环中递增“p”,但它不会释放互斥锁。 所以我的问题是,如果线程 A 不释放互斥锁,线程 B 可以访问变量 'p' 吗??
编辑 线程 B 也使用互斥锁来保护对 'p' 的访问。
如果线程 A 使用 pthread_mutex_lock() 锁定并且没有释放它,那么如果同一个线程 (A) 尝试再次访问锁会发生什么(记住线程 A 正在循环中) 例如
while(1)
{
pthread_mutex_lock(&mutex);
p = 10;
}
如果互斥锁从不释放,这段代码有什么问题吗?
【问题讨论】:
-
线程 B 可以访问该变量,如果您没有使用互斥锁保护该访问(这是您没有告诉我们的部分)。
-
如果B正在使用互斥锁,不,它不能访问p。如果 B 没有使用互斥锁,是的,它可能会改变 p 并且你有问题!添加您的示例代码,我们可以明确回答。
-
编辑后:线程 B 将永远等待获取互斥锁。
-
pthread_mutex_lock上的手册是怎么说的? -
你对互斥锁的使用是 1。如果你从不解锁它就没什么用了。 2. 如果互斥锁是 PTHREAD_MUTEX_NORMAL 是非常危险的 - pthread_mutex_lock 的文档回答了这个问题 - 你的程序将死锁。