码迷,mamicode.com
首页 > 其他好文 > 详细

原子操作的原理

时间:2014-09-08 03:16:46      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:windows   源代码   计算机   如何   linux   

在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.
.
   
 

原子操作的原理

标签:windows   源代码   计算机   如何   linux   

原文地址:http://5228690.blog.51cto.com/5218690/1549852

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!