64,652
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <Windows.h>
#include <string>
#include <set>
#include <io.h>
#include <fstream>
#include <Windows.h>
#include<time.h>
#include <stdio.h>
#include <process.h>
#include <iostream>
using namespace std;
__int64 g_int64 = 0;
char log2Write[100];
DWORD __stdcall thread1(LPVOID lpVoid)
{
while(true)
{
g_int64 = 1111111111;
Sleep(10);
memset(log2Write, 0x00, 100);
sprintf_s(log2Write,100,"%lld\r\n", g_int64);
cout<<log2Write;
Sleep(250);
}
return 1;
}
DWORD __stdcall thread3(LPVOID lpVoid)
{
while(true)
{
g_int64 = 3333333333;
Sleep(10);
memset(log2Write, 0x00, 100);
sprintf_s(log2Write,100,"%lld\r\n", g_int64);
cout<<log2Write;
Sleep(250);
}
return 1;
}
DWORD __stdcall thread4(LPVOID lpVoid)
{
while(true)
{
g_int64 = 4444444444;
Sleep(10);
memset(log2Write, 0x00, 100);
sprintf_s(log2Write,100,"%lld\r\n", g_int64);
cout<<log2Write;
Sleep(250);
}
return 1;
}
DWORD __stdcall thread2(LPVOID lpVoid)
{
while(true)
{
g_int64 = 2222222222;
Sleep(10);
memset(log2Write, 0x00, 100);
sprintf_s(log2Write,100,"%lld\r\n", g_int64);
cout<<log2Write;
Sleep(250);
}
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD d1,d2,d3;
CreateThread(NULL, 0, thread1, NULL, 0,&d1);
CreateThread(NULL, 0, thread2, NULL, 0,&d2);
CreateThread(NULL, 0, thread3, NULL, 0,&d3);
Sleep(10000222110);
return 0;
}
看上面的333333333(只有9个3),实际应该输出10个3,我运行的环境是CPU64位处理器,64位的操作系统。上面4个线程对一个全局的int64 进行无锁的访问,读和写。测试的结果是:程序不会崩溃,但是会出现数据错误。所以我上面提出的设想是不正确的,还是要加锁。