49个线程的线程屏障

问题描述 投票:0回答:1

我应该在某个进程中创建49个线程(我的问题这里有多个进程,所以我们将其称为进程P3)。我创建了这些线程,但是问题在这里出现:在任何时候,最多可以在P3中运行5个线程,而无需计算主进程。仅当总共有5个线程正在运行时(线程13在这5个线程中),才允许P3中的线程13结束。我的问题是:我如何确保在程序执行的某个时刻将有5个线程在运行,并且其中将有线程13,以便可以结束其执行。我正在使用C作为编程语言和Linux系统调用。此外,不允许使用“ sleep()”和“ usleep()”。

这是我计算线程数的函数。

`void * thread_function2(void * arg){

TH_STRUCT* st=(TH_STRUCT*)arg;



sem_wait(&sem);

sem_wait(&sem2);
nrThreads++;
sem_post(&sem2);

printf("Number of threads running: %d\n",nrThreads);




sem_wait(&sem3);
nrThreads--;
sem_post(&sem3);

sem_post(&sem);

return 0;

}`

这部分来自创建线程的主线程:sem_init(&sem,0,5); sem_init(&sem2,0,1); sem_init(&sem3,0,1); sem_init(&sem4,0,1);

        for(int i=1;i<=49;i++)
        {
            params1[i].procNum=3;
            params1[i].threadNum=i;
            pthread_create(&tids1[i],NULL,thread_function2,&params1[i]);
        }

`

c linux multithreading pthreads posix
1个回答
0
投票

在这种情况下,semaphore将很有用,

使用中:

  • sem_init初始化为所需值
  • sem_init增加值
  • sem_post减小并在信号量值为零时阻塞
© www.soinside.com 2019 - 2024. All rights reserved.