我想编写两个线程,首先从控制台读取一个字符串,第二个将输出其中的字符数。
为此,我必须设置执行线程的顺序,首先读取,然后写入第二个。
此外,我想要一个线程在当时执行。
我该怎么做?
#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
}
答案 0 :(得分:1)
genine(pthread)线程最大的兴趣是启用并行执行(利用大多数笔记本电脑和台式机拥有的几个核心)... 阅读一些pthread tutorial ...
您可能想要使用障碍。详细了解pthread_barrier_wait&amp; pthread_barrier_init
如果你想序列化一些计数器,你可以使用(最近的C11编译器,例如GCC 4.9)一些atomic builtins,或更多通常是mutex,请参阅{{3} }&amp; pthread_mutex_init等......:
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
变量使用互斥锁,如果它是静态的!