我基本上问我是否在一个方法中获取锁并从该方法调用第二个方法,第二个方法是否会保持独占内存访问? 这是一些示例代码。作为参考,我使用pthreads在C编码。
int count = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
method1() {
pthread_mutex_lock(&mutex);
count++;
method2();
pthread_mutex_unlock(&mutex);
}
method2() {
printf("count = %d\n", count);
}
因此,如果线程A启动并调用method1(获取锁定),那么方法1中对方法2的A调用是否仍会被内存锁定,因为A仍然具有互斥锁?因此,当A仍在打印时,没有其他线程可以改变计数吗?
答案 0 :(得分:0)
不,由于method2
使用互斥锁,method1
并非独占。所有其他线程都可以调用并访问method2
- 无论互斥状态如何。
没有其他线程可以访问method1
,但method2
可用于所有线程。
因此,当线程Y执行method2
时,线程X可以调用method1
,这可能导致线程X打印一些不完整的值。
如果要保护method2
,则必须将互斥锁移入其中。
答案 1 :(得分:0)
在这种情况下,从method2()
调用count
时,method2()
对method1()
的访问权限受互斥锁的保护。但是,如果在没有互斥锁的情况下从另一个地方调用method2()
,则不适用。