我正在尝试解决以下问题,我知道有多种解决方案,但我正在寻找最优雅的方法(更少的代码)来解决它。
我有 4 个线程,其中 3 个尝试在无限循环中将唯一值(0、1 或 2)写入易失性整数变量,第四个线程尝试读取此变量的值并将值打印到标准输出也处于无限循环中。
我想在线程之间同步,这样写 0 的线程将被运行,然后是“打印”线程,然后是写 1 的线程,然后是打印线程,依此类推......所以最后我期望在“打印”线程的输出中看到一个零序列,然后是 1 序列,然后是 2,然后是 0 等等......
在这些线程之间同步的最优雅和最简单的方法是什么?
这是程序代码:
volatile int value;
int thid[4];
int main() {
HANDLE handle[4];
for (int ii=0;ii<4;ii++) {
thid[ii]=ii;
handle[ii] = (HANDLE) CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) ThreadProc, &thid[ii], 0, NULL);
}
return 0;
}
void WINAPI ThreadProc( LPVOID param ) {
int h=*((int*)param);
switch (h) {
case 3:
while(true) {
cout << value << endl;
}
break;
default:
while(true) {
// setting a unique …Run Code Online (Sandbox Code Playgroud)