线程同步技术
1.原子锁
相关问题
多个线程对同一个数据进行原子操作,会产生结果丢失。比如执行++运算时。
错误代码分析:
当线程A执行g_value++时,如果线程切换时间正好是在线程A将值保存到g_value之前,线程B继续执行g_value++,那么录线程A再次被切换回来之后,会将原来线程A保存的值保存到g_value上,线程B进行的加法操作被覆盖。
//代码示例错误执行结果
#include <Windows.h>
#include <stdio.h>
long g_value = 0;
DWORD CALLBACK MyThreadProc(LPVOID lpParam)
{
for(int i = 0 ; i < 100000000;i++)
{
g_value++;
}
return 0;
}
DWORD CALLBACK MyThreadProc2(LPVOID lpParam)
{
for(int i = 0 ; i < 100000000;i++)</