一个线程同步的问题
ffee 2006-03-20 02:17:45 正在学习操作系统,老师给了一个线程同步的代码,分析了好久了,知道肯定有问题。比如说当一个线程执行到 accnt1 = tmp1 + r 的时候另一个线程如果在此时进入并执行完毕的话就能够退出这个看似死循环的循环。
但问题是,代码执行的结果会有好几种情况,有时候给出两个输出数据,有时候只给出一个输出数据,有时候甚至一个输出数据都不给出。
我只能分析出一种情况。请大家帮帮忙:)
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int accnt1 = 0;
int accnt2 = 0;
DWORD WINAPI run( LPVOID p) {
int counter=0;
int tmp1, tmp2, r;
do {
tmp1 = accnt1;
tmp2 = accnt2;
r = rand();
accnt1 = tmp1 + r;
accnt2 = tmp2 - r;
counter++;
} while ( accnt1 + accnt2 == 0 );
printf("%d\n", counter);
return 0;
}
int main(int argc, char *argv[])
{
CreateThread(NULL,
0,
run,
NULL,
0,
NULL);
CreateThread(NULL,
0,
run,
NULL,
0,
NULL);
system("PAUSE");
return 0;
}