【发布时间】:2014-12-30 14:54:55
【问题描述】:
我正在尝试锁定两个互斥锁,以便每个线程(总共 8 个线程)的输出不会混淆。代码的主要部分创建这 8 个线程并将策略设置为 FIFO。它有点工作,但不是所有的线程输出。下面的代码是整个代码中唯一包含任何类型的任何互斥锁的函数。
代码是:
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 的示例输出:
Thread 1 is started
Thread 5 is started
Thread 3 is started
Thread 7 is started
Thread 1 Looped: 1185961319
【问题讨论】:
-
globalstop何时/如何变为非false?互斥锁在哪里/如何初始化? -
globalstop 与问题无关。当按下“Enter”时 globalstop 变为真,每个线程旋转并向上计数,然后当按下 enter 时,它应该输出每个线程 spin-count 。 @ScottHunter
-
还有互斥体初始化?
-
互斥量初始化:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex2 = PTHREAD_MUTEX_INITIALIZER;@ScottHunter
标签: c++ linux multithreading unix mutex