【发布时间】:2012-09-09 19:36:34
【问题描述】:
我正在尝试学习线程和互斥锁是如何工作的,但是我现在遇到了一些困惑,我从官方 SFML 1.6 教程中获取了以下代码:
#include <SFML/System.hpp>
#include <iostream>
void ThreadFunction(void* UserData)
{
// Print something...
for (int i = 0; i < 10; ++i)
std::cout << "I'm the thread number 1" << std::endl;
}
int main()
{
// Create a thread with our function
sf::Thread Thread(&ThreadFunction);
// Start it !
Thread.Launch();
// Print something...
for (int i = 0; i < 10; ++i)
std::cout << "I'm the main thread" << std::endl;
return EXIT_SUCCESS;
}
它说
因此,来自两个线程的文本将同时显示。
但是这并没有发生,它首先执行第一个线程然后执行第二个线程,它们不应该同时运行吗?我在 Windows XP SP3 上使用 Codeblocks IDE,运行 SFML 1.6。我做错了什么,还是我误解了它们的工作原理?从我的角度来看,线程应该同时执行,所以输出应该是这样的
"来自线程 1 的文本 来自线程 2 的文本 来自线程 1 的文本 等等”
【问题讨论】:
-
尝试提高计数器...或者在每个循环中添加一个小延迟。
-
输出比以前更令人困惑,它显示的内容与我原来的帖子相同,除了更多行,但在第二个线程的末尾,它从第一个线程添加了一行。很混乱,不过这段代码是我从官网拿的,不是我写的,反正不应该行吗?
-
准备好输出“混乱”,因为 cout 不同步,如果多个线程同时写入它可能很难读取。
标签: c++ multithreading sfml