【发布时间】:2018-03-30 19:30:07
【问题描述】:
int main() {
thread t1([] {printer("*", 100); });
thread t2([] {printer("+", 100); });
t1.join();
t2.join();
}
void printer(string c, int num)
{
for (int i = 1; i <= num; i++)
{
cout << c;
}
cout << endl;
}
现在这会打印出类似 ****+++** 我希望它在一行中打印 *** 然后在一行中打印 +++ 所有内容。我们不允许使用互斥锁或阻止线程访问打印机功能。代码仍然必须是多线程的。
关于如何做到这一点的任何想法?
【问题讨论】:
-
简单 - 在第一个线程完成之前不要启动第二个线程。
-
从措辞上看,这听起来像是一个家庭作业,所以必须满足这里的限制条件。但一般来说,如果您需要完成一项任务然后再执行另一项任务,这不适合多线程,毕竟这是关于同时执行的。
-
@bananas -- 回应您的评论,是的,这与多线程不一致,那是因为 要求 与多线程不一致。 (我之前的评论是在你最近的评论之前写的)
-
听上去像是老师想到了一些特殊技巧的课堂作业。这就像通常的垃圾“不使用 a,b,c 做 x”,其中 a,b,c 是正确、正常的做事方式
-
"不允许使用互斥锁或阻塞线程" - 你知道 cout 写入标准输出,它里面有一个互斥锁吗?
标签: c++ multithreading