从具有锁的方法中调用方法是否保持对内存的独占访问?

时间:2017-10-12 18:22:17

标签: c pthreads locking mutex

我基本上问我是否在一个方法中获取锁并从该方法调用第二个方法,第二个方法是否会保持独占内存访问? 这是一些示例代码。作为参考,我使用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仍在打印时,没有其他线程可以改变计数吗?

2 个答案:

答案 0 :(得分:0)

不,由于method2使用互斥锁,method1并非独占。所有其他线程都可以调用并访问method2 - 无论互斥状态如何。

没有其他线程可以访问method1,但method2可用于所有线程。

因此,当线程Y执行method2时,线程X可以调用method1,这可能导致线程X打印一些不完整的值。

如果要保护method2,则必须将互斥锁移入其中。

答案 1 :(得分:0)

在这种情况下,从method2() 调用count时,method2()method1()的访问权限受互斥锁的保护。但是,如果在没有互斥锁的情况下从另一个地方调用method2(),则不适用