在Liunx中定义以两种原子操作,一种针对整数变量,另外一种针对位图中的某位(bit),这些操作在Linux支持的任何计算机体系结构中都需要实现。在某些体系结构中,这些原子操作有相应的汇编指令。其他体系结构通过锁住内存总线的方式来保证操作的原子性。
究竟Windows如何保证原子操作,值得我们深思,特别是当我们使用信号量,临界区,互斥区等的时候。目前Windows API函数到底实现的源代码是什么,是以后研究的问题。
自己尝试写的一个原子操作函数
////////////////////////////////////////////////////////////////////////////
typedef int semaphore;
int mutex(semaphore s)
{
while(s<1)//test whether the signal is valid
{
Sleep(1000);
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////////
last week, I go to another place to finish the test .During at that time ,I try to write something by
myself .such as code like this
//global member
int signal=0;
DWORD WINAPI thread1(PVOID param)
{
int count=10;
while(count>0)
{
if(signal ==0)
{
cout<<"thread1<<endl;
signal=1;
count++;
}
else
{
Sleep(100);
}
}
return 0;
}
DWORD WINAPI thread2(PVOID param)
{
int count=10;
while(count>0)
{
if(signal ==1)
{
cout<<"thread1<<endl;
signal=0;
count++;
}
else
{
Sleep(100);
}
}
return 0;
}
now here we use the signal to adjust the two thread to run ,we want to get the result like this
thread1
thread2
thread1
thread2
now we ignore the output memory which may be dirty written by the two thread.
can this success?
we wait here.
.
原文地址:http://5228690.blog.51cto.com/5218690/1549852