同步所有活动线程C并逐个释放它们?

时间:2017-03-29 06:14:25

标签: c multithreading synchronization queue

C中是否有办法在C程序中创建所有线程,等待其他活动线程,然后按照它们来的顺序释放它们,比如等待线程的队列

1 个答案:

答案 0 :(得分:0)

我会试着通过给你上个学期的一些笔记来帮助......

线程

GCC计划-lpthread

#include <pthread.h>
int main(int argc, char *argv[]) {

这将启动类/调度程序并将其命名为mulo

pthread_mutex_t mulo = PTHREAD_MUTEX_INITIALIZER;

这会启动一个停止并开始执行线程的条件

pthread_cond_t  c = PTHREAD_COND_INITIALIZER;

定义将成为线程的结构

pthread_t t1, t2, t3;
pthread_t array[3];   // this is valid to set multiple variables

定义范围/命名空间

pthread_mutex_init(&mulo, NULL);

创建流程

pthread_create(&t1, NULL, printMessage, NULL);

或只是..

fork(); 

验证创建,线程ID的类型为pid_t(int)

pid_t  pid;
pid = fork();   // All child processes return 0.. if    error = -1  

锁定(和解锁)一个函数,这样一次只能有一个进程运行它

pthread_mutex_lock(&mulo);
pthread_mutex_unlock(&mulo);

用于发出解锁信号

pthread_cond_signal(&c);
pthread_cond_wait(&c, &mulo);

所有使用线程的函数都必须是函数指针

void *printMessage() { …. } 
pthread_create(&t1, NULL, printMessage, NULL);

从线程传递值

pthread_create(&array[i], NULL, runCommand, (void *) &command);

void *inc_count(void *idp) {
    int passed_in_value = *((int *) idp);
    .
    .
    .
}

完成它

pthread_join(t1,NULL);
pthread_join(t2,NULL);