gpt4 book ai didi

c - 如何在线程之间暂停执行?

转载 作者:行者123 更新时间:2023-11-30 17:58:36 24 4
gpt4 key购买 nike

我正在学习线程同步,这是演示如何在线程执行时锁定关键数据的演示:

http://ideone.com/7Do0l(要运行此代码,请在 Linux/MacOS 环境中使用 -pthread 参数进行编译)

程序按预期工作,但 sleep() 函数不会暂停线程之间的执行。我的想法是让一个线程一次进行计算,然后 1 秒后另一个线程开始发挥作用。这是我正在处理的代码段:

while(1) {
//sleep(1); //(1) (Sleep for one second)
sem_wait(&mutex);
//sleep(1); //(2)
printf("Thread #%d is doing math. %d + 1 = %d.\n", (int) id, s, s+1);
s++;
//sleep(1); //(3)
sem_post(&mutex);
//sleep(1); //(4)
}

我尝试将 sleep() 放入四个位置。(1) 和 (4) 导致单个线程之间没有暂停,但两个十个线程之间没有暂停。 (2) 和 (3) 导致一个线程在另一个线程被调用之前重复执行很长时间。

有办法解决这个问题吗?

更新

有一个技巧可以让程序产生结果:为每个线程随机生成 sleep 时间,但它并不一致,因为两个随机数可能会意外相同。

最佳答案

将其放在第三个位置,因为您希望 printf 消息之间有一秒的延迟。

如果要确保所有线程在进入临界区之前都已初始化,请将链接代码的 main 函数修改为此

int main() {
pthread_t thread[10];

int i;
sem_init(&mutex, 0, 1);
sem_wait(&mutex);
for (i = 0; i<10; ++i)
pthread_create(&(thread[i]), NULL, job, (void*) i);
sem_post(&mutex);
sleep(100);
}

关于c - 如何在线程之间暂停执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12103194/

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