我有两个共享的全局变量
int a = 0;
int b = 0;
和两个线程
// thread 1
for (int i = 0; i < 10; ++i) {
EnterCriticalSection(§);
a++;
b++;
std::cout << a " " << b << std::endl;
LeaveCriticalSection(§);
}
// thread2
for (int i = 0; i < 10; ++i) {
EnterCriticalSection(§);
a--;
b--;
std::cout << a " " << b << std::endl;
LeaveCriticalSection(§);
}
代码总是打印以下输出
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
9 9
8 8
7 7
6 6
5 5
4 4
3 3
2 2
1 1
0 0
这很奇怪,看起来线程是按顺序工作的。这有什么问题吗?
谢谢。
最佳答案
每个线程在被抢占之前都有一个特定的时间片执行。在您的示例中,时间片似乎比完成循环所需的时间长。
但是,您可以在将关键部分留在循环内后通过调用 Sleep(0)
主动放弃控制权。
关于c++ - Windows 关键部分奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4733915/