我试图锁定两个互斥锁,以便每个线程(总共8个线程)的输出不会混淆。代码创建这8个线程并将策略设置为FIFO。它有点作品,但不是所有的线程输出。下面的代码是唯一的功能,包括整个代码中的任何类型的互斥体。互斥锁不工作,就像我不想在Linux Bourne shell中工作
代码:
void* print_message_function2(void* x)
{
ostringstream convert;
long int num = (long int) x;
long int counter = 0;
pthread_mutex_lock(&mutex1);
string ThreadId;
convert << num;
ThreadId = convert.str();
cout << "Thread " << ThreadId << " is started";
cout << endl;
pthread_mutex_unlock(&mutex1);
while(globalstop == false)
{
counter++;
}
pthread_mutex_lock(&mutex2);
string LoopCounter;
convert << counter;
LoopCounter = convert.str();
cout << "Thread "<< ThreadId <<" Looped: " << LoopCounter;
cout << endl;
pthread_mutex_unlock(&mutex2);
pthread_exit (NULL);
}
同样来自Bourne shell的一个输出样本:如果我用printf
代替cout
Thread 1 is started
Thread 5 is started
Thread 3 is started
Thread 7 is started
Thread 1 Looped: 1185961319
“globalstop”何时/如何变为“false”?互斥体在哪里/如何初始化? – 2014-11-03 20:59:12
globalstop与问题无关。当按下“Enter”时,globalstop会变为true,每个线程旋转并计数,然后当输入被按下时,可以输出每个线程的旋转计数。 @ScottHunter – MattiasLarsson 2014-11-03 21:02:35
和互斥量初始化? – 2014-11-03 21:06:03