我应该在某个进程中创建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,¶ms1[i]);
}
`