gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:40:20 25 4
gpt4 key购买 nike

我基本上是在问,如果我在一个方法中获取锁并从该方法调用第二个方法,第二个方法是否会保持独占内存访问?这是一些示例代码。作为引用,我使用 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(获取锁),由于 A 仍然拥有互斥锁,A 在 method1 中对 method2 的调用是否仍处于内存锁定状态?那么当 A 仍在打印计数时,没有其他线程可以更改计数?

最佳答案

不,method2 不是独占的,因为 method1 采用了互斥锁。所有其他线程都可以调用并访问 method2 - 无论互斥状态如何。

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

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

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

关于c - 从带有锁的方法内调用方法是否保持对内存的独占访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com