gpt4 book ai didi

c++ - 线程同步打印5个随机数

转载 作者:搜寻专家 更新时间:2023-10-31 01:55:21 27 4
gpt4 key购买 nike

我被要求编写一个程序,该程序将有 2 个线程并打印 5 个随机整数,这样第一个线程将生成一个数字,第二个线程将打印它。然后第一个将生成第二个数字,第二个线程将使用互斥锁打印它……等等。

我的代码现在执行一个周期。我如何扩展它以使线程执行方法 5 次?

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void* generate (void*);
void* print (void*);

pthread_mutex_t m;
int number = 5;
int genNumber;


int main()
{
int i;
srandom(getpid());
pthread_t th[2];

pthread_mutex_init(&m,NULL);

pthread_create(&th[0],NULL,generate,NULL);
pthread_create(&th[1],NULL,print, NULL);

for (i = 0; i < 2; i++)
pthread_join(th[i], NULL);

pthread_mutex_destroy(&m);

return 0;
}

void* generate(void* arg)
{
pthread_mutex_lock(&m);
genNumber = random() % 9;
printf("Generated #1 \n");
pthread_mutex_unlock(&m);
}

void* print(void* arg)
{
pthread_mutex_lock(&m);
printf("The number is %d " , genNumber);
pthread_mutex_unlock(&m);
pthread_exit(NULL);
}

最佳答案

使用condition variables同步两个线程。当一个线程完成其工作时,它会向另一个线程发出唤醒信号,然后进入休眠状态以等待更多工作。所以像这样:

// Pseudocode
pthread_cond_t c1, c2;
pthread_mutex_t mutex;

// Thread 1 (producer):
for(int i = 0; i < 5; i++)
{
lock(mutex);
genNumber = random() % 9;
signal(c2);
wait(c1, mutex);
unlock(mutex);
}

// Thread 2 (consumer):
for(int i = 0; i < 5; i++)
{
lock(mutex);
wait(c2, mutex);
print("The number is %d\n", genNumber);
signal(c1);
unlock(mutex);
}

关于c++ - 线程同步打印5个随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546065/

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