订购两个线程的执行

我想写两个线程,第一个将从控制台读取一个string,第二个将输出字符数。

为此,我必须设置执行线程的顺序,先读后写。

另外我想要一个线程执行。

我怎样才能做到这一点?

#include <stdio.h> #include <stdlib.h> #include <pthread.h> void *printCharacterNumber(void *ptr); void *readMessage(void *ptr); int main() { pthread_t thread1, thread2; int iret1, iret2; iret1 = pthread_create(&thread1, NULL, printMessage, NULL); iret2 = pthread_create(&thread2, NULL, printCharacterNumber, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); return 0; } void *readMessage(void *ptr) { char *message; fscan("%s", &message); } void *printCharacterNumber(void *ptr) { printf("%s", message); // I'll add counting when it will work } 

Solutions Collecting From Web of "订购两个线程的执行"

genine(pthread)线程最大的兴趣是使并行执行(从大多数笔记本电脑和台式机的几个核心获利)…阅读一些pthread教程 …

你可能想要使用障碍。 阅读有关pthread_barrier_wait & pthread_barrier_init的更多信息

如果你想序列化一些计数器,你可以使用(使用最近的C11编译器,例如GCC 4.9)一些原子内建的 ,或者更通常的是一个互斥体 ,参见pthread_mutex_init & pthread_mutex_lock等….:

  static pthread_mutex_t mtx = PTHREAD_MUTEX_INIT; static long counter; void increment_serialized_counter (void) { pthread_mutex_lock(&mtx); counter++; pthread_mutex_unclock(&mtx); } long get_serialized_counter (void) { long r = 0; pthread_mutex_lock(&mtx); r = counter; pthread_mutex_unclock(&mtx); return r; } 

如果它是静态的,你可能应该为你的message变量使用一个互斥量!