我是C编程的新手,我正在学习它。给我的任务如下:
以后的任务需要之前创建的线程。 还有更多的任务,例如零售商通过运营商与客户沟通,但这不是我要问的问题
这是我的一些代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define NUM_THREAD 21
void* operator (void* arg) {
//Logic here
}
void* retailer(void *arg) {
//Logic here
}
void* customer(void* arg) {
//Logic here
}
main() {
pthread_t threads[NUM_THREAD];
int i = 0;
pthread_create(&threads[0],NULL , operator , NULL);
printf("Operator created.\n");
for ( i = 1 ; i < 11 ; i++) {
pthread_create(&threads[i], NULL , retailers ,NULL);
}
for (i = 11 ; i < NUM_THREAD ; i++) {
pthread_create(&threads[i], NULL , customers , NULL);
}
}
预期输出
Operator created.
Retailer 1 Created.
...
Retailer 10 Created.
Customer 1 Created.
...
Customer 10 Created.
..The rest of output are the action between Operator , retailers and customers which involves semaphores and other stuff
我在互联网上搜索过,我对如何在创建后“重用”线程没有任何想法。当我创建一个线程时,它应该开始执行pthread_create中指定的函数。但是,在执行该函数之后,它只是失去了任务1,2,3的含义,因为任务3之后的任务需要这些线程。
要明确,这是我的问题
答案 0 :(得分:1)
在回答你的第一个问题时,线程函数通常包括启动代码,一些描述的长时间循环和终止代码,如下面的伪代码,粗略说明:
def retailer:
initialise thread-local stuff
while termination condition not met:
do some processing
terminate thread-local stuff
所以一个线程将继续运行,直到某段代码(例如CTRL-C信号处理程序,或用户告诉它停止时的主线程)指示它应该停止。
请注意,在线程之间共享保护资源的正确使用(例如检查终止条件和“执行某些处理”中涉及的任何线程间通信)是上述代码中固有的,我没有明确地 提到了它,但应该这样做。
对于你的第二个问题,你几乎可以在线程函数中放入你想要的任何代码,就像它是一个普通的单线程代码一样。
线程介绍了您通常不必关注的某些方面,例如竞争条件,线程本地存储或线程同步(互斥,条件变量等),但您可以使用正常的C控制流<{1}}和if
等内容无关紧要。