gpt4 book ai didi

c - 锁定多线程,并在其中循环访问同一数据 block

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

所以我有 5 个线程同时添加相同的计数器。线程函数类似于:

define MAX_NUM 1000;
int counter;
int isMax;

thread_function(){
while (isMax == 0) {
if (counter < MAX_NUM) {
counter++
} else {
isMax = 1;
}
}
}

我正在尝试向线程添加锁,以便一次只有一个线程更改数据。

define MAX_NUM 1000;
int counter;
int isMax;
Lock *myLock;

thread_function(){
while (isMax == 0) {
lock_acquire(myLock);
if (counter < MAX_NUM) {
counter++;
} else {
isMax = 1;
}
lock_release(myLock);
}
}

出于某种原因,这不会阻止不同线程同时添加计数器。谁能告诉我为什么这不起作用以及如何解决它?

最佳答案

在lock_release(myLock)之后,您必须放弃CPU。如果您使用 posix 线程,则可以使用 sched_yield()。另外,有些编译器可以优化isMax,所以将其定义为“volatile int”而不是“int”

关于c - 锁定多线程,并在其中循环访问同一数据 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42974833/

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