【发布时间】:2014-09-15 12:54:41
【问题描述】:
我想知道在使用多线程时如何处理打印。
我认为这很简单:
#include <iostream>
#include <pthread.h>
using namespace std;
bool printing = false;
struct argumentStruct {
int a;
float b;
};
void *ThreadFunction(void *arguments) {
struct argumentStruct*args = (struct argumentStruct*)arguments;
int a = args->a;
float b = args->b;
while (printing) {}
printing = true;
cout << "Some text...." << a << b << endl;
printing = false;
}
main() {
pthread_t threads[3];
struct argumentStruct argStruct[3];
argStruct[0].a = 1;
argStruct[0].b = 1.1;
pthread_create(&threads[0], NULL, &ThreadFunction, (void *)&argStruct[0]);
argStruct[1].a = 2;
argStruct[1].b = 2.2;
pthread_create(&threads[1], NULL, &ThreadFunction, (void *)&argStruct[1]);
argStruct[2]a = 3;
argStruct[2].b = 3.3;
pthread_create(&threads[2], NULL, &ThreadFunction, (void *)&argStruct[2]);
getchar();
return 0;
}
但这并没有那么好。一些 couts 只是被跳过(或者可能被覆盖?)。
那么我做错了什么?我该如何正确处理?
【问题讨论】:
-
有个东西叫mutex ...
-
printing将缺乏所有线程的统一可见性。建议您使用适当的并发机制(互斥锁、锁...)。 -
您可以尝试
volatile bool printing或使用std::mutex。如果没有您的实际代码,很难知道还有什么建议。 -
另一件需要注意的事情:即使使用
std::mutex,您所做的只是确保不会同时发生多个写入。来自不同线程的输出仍然可以以任何顺序发生。
标签: c++ multithreading printing cout