青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-163  評(píng)論-223  文章-30  trackbacks-0
   自旋鎖作為一種并發(fā)同步的手段,特別適用于競(jìng)爭(zhēng)少和鎖時(shí)間短的情況,在驅(qū)動(dòng)及內(nèi)核代碼中經(jīng)常被用到,本文講述一種適合用戶態(tài)程序的自旋鎖,支持Windows和Linux(GCC>=4.1.2)平臺(tái),并提供了C語(yǔ)言的接口和實(shí)現(xiàn)。

接口
   spin_trylock如果獲取成功返回1,否則返回0;spin_is_lock如果已加鎖,返回1,否則返回0。
 1typedef struct 
 2{
 3 volatile long  flag_;
 4 volatile long* spin_;
 5}
spin_lock_t;
 6
 7void spin_init(spin_lock_t* lock,long* flag);
 8
 9void spin_lock(spin_lock_t* lock);
10
11int spin_trylock(spin_lock_t* lock);
12
13void spin_unlock(spin_lock_t* lock);
14
15int spin_is_lock(spin_lock_t* lock);

實(shí)現(xiàn)
 1#ifdef _MSC_VER
 2#include <windows.h>
 3#elif defined(__GNUC__)
 4#if __GNUC__<4 || (__GNUC__==4 && __GNUC_MINOR__<1)
 5#error GCC version must be greater or equal than 4.1.2
 6#endif
 7#include <sched.h>
 8#else
 9#error Currently only windows and linux os are supported
10#endif
11
12void spin_init(spin_lock_t* lock,long* flag)
13{
14#ifdef _MSC_VER
15    InterlockedExchange((volatile long*)&lock->flag_,0);
16    InterlockedExchange((volatile long*)&lock->spin_,flag?(long)flag:(long)&lock->flag_);
17#elif defined(__GNUC__)
18    __sync_and_and_fetch((long*)&lock->flag_,0);
19    __sync_lock_test_and_set((long*)&lock->spin_,flag?(long)flag:(long)&lock->flag_);
20#endif
21}

22
23void spin_lock(spin_lock_t* lock)
24{
25#ifdef _MSC_VER
26    for (;0!=InterlockedExchange((volatile long*)lock->spin_,1);)
27    {
28        Sleep(1);
29    }

30#elif defined(__GNUC__)
31    for (;0!=__sync_fetch_and_or(lock->spin_,1);)
32    {
33        sched_yield();
34    }

35#endif
36}

37
38int spin_trylock(spin_lock_t* lock)
39{
40#ifdef _MSC_VER
41    return !InterlockedExchange((volatile long*)lock->spin_,1);
42#elif defined(__GNUC__)
43    return !__sync_fetch_and_or(lock->spin_,1);
44#endif
45}

46
47void spin_unlock(spin_lock_t* lock)
48{
49#ifdef _MSC_VER
50    InterlockedExchange((volatile long*)lock->spin_,0);
51#elif defined(__GNUC__)
52    __sync_and_and_fetch(lock->spin_,0);
53#endif
54}

55
56int spin_is_lock(spin_lock_t* lock)
57{
58#ifdef _MSC_VER
59    return InterlockedExchangeAdd((volatile long*)lock->spin_,0);
60#elif defined(__GNUC__)
61    return __sync_add_and_fetch(lock->spin_,0);
62#endif
63}
posted on 2012-06-13 21:02 春秋十二月 閱讀(3085) 評(píng)論(3)  編輯 收藏 引用 所屬分類: C/C++

評(píng)論:
# re: 一種簡(jiǎn)單的跨平臺(tái)用戶態(tài)自旋鎖 2012-06-13 22:57 | egmkang
lock的時(shí)候,可以先去獲取一下?tīng)顟B(tài),如果都是lock的,那么就沒(méi)有必要原子操作.
這樣效率會(huì)高一點(diǎn).  回復(fù)  更多評(píng)論
  
# re: 一種簡(jiǎn)單的跨平臺(tái)用戶態(tài)自旋鎖 2012-06-22 01:34 | tb
挺不錯(cuò)的   回復(fù)  更多評(píng)論
  
# re: 一種簡(jiǎn)單的跨平臺(tái)用戶態(tài)自旋鎖 2013-09-25 23:00 | egmkang
spin_lock的實(shí)現(xiàn),其實(shí)最好的是先判斷一下,然后再去嘗試著原子操作;否則如果鎖碰撞比較大,會(huì)把很多實(shí)踐浪費(fèi)在原子操作上,不劃算.
另外,把變量聲明成volatile貌似是不合適的吧.多線程和volatile沒(méi)有任何關(guān)系.
原子操作完成了,其他CPU里面看到的值就一定是最新的,至少在x86體系上面是這樣,如果是其他CPU貌似還要加一個(gè)barrier.  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产日韩欧美在线观看| 久久久综合免费视频| 久久亚洲免费| 在线观看视频一区二区| 久久精品国产77777蜜臀| 亚洲春色另类小说| 亚洲欧美日韩在线一区| 欧美日韩精品欧美日韩精品 | 久久久久99精品国产片| 亚洲午夜一区二区三区| 国产精品国产福利国产秒拍| 亚洲砖区区免费| 亚洲一区二区黄色| 国产精品福利av| 午夜精品国产| 久久精品国产第一区二区三区| 国产一区二区三区在线免费观看 | 亚洲香蕉视频| 亚洲视频网在线直播| 国产精品专区h在线观看| 欧美在线短视频| 欧美制服丝袜第一页| 在线免费观看成人网| 亚洲国产影院| 欧美午夜视频在线| 久久精品99无色码中文字幕| 久久久av毛片精品| 亚洲二区视频| 亚洲美女中文字幕| 国产自产高清不卡| 亚洲激情视频网站| 国产农村妇女精品| 欧美刺激午夜性久久久久久久| 欧美成人在线影院| 欧美中文字幕久久| 麻豆视频一区二区| 亚洲一区二区三区在线观看视频| 亚洲欧美国产另类| 在线国产亚洲欧美| 中文久久乱码一区二区| ●精品国产综合乱码久久久久| 亚洲理论电影网| 国产偷久久久精品专区| 亚洲日产国产精品| 狠狠综合久久av一区二区小说| 日韩视频不卡| 精品动漫3d一区二区三区| 亚洲美女视频在线免费观看| 国产日韩欧美一区二区三区四区| 欧美激情网友自拍| 国产视频观看一区| 一本色道久久综合精品竹菊| 在线播放中文一区| 亚洲在线网站| 亚洲少妇一区| 欧美成人蜜桃| 久久视频一区二区| 国产精品久久久久久久第一福利| 欧美成人r级一区二区三区| 国产精品美女主播在线观看纯欲| 欧美sm极限捆绑bd| 国产综合色产在线精品| 一区二区三区蜜桃网| 99精品久久久| 免费毛片一区二区三区久久久| 欧美在线综合视频| 国产精品欧美日韩一区二区| 亚洲精品一区二区三区蜜桃久 | 欧美国产日韩精品| 狼人天天伊人久久| 国内精品美女在线观看| 亚洲欧美日韩专区| 欧美一级一区| 国产精品久久久久久超碰| 日韩视频中文字幕| 一区二区毛片| 欧美日韩在线视频首页| 亚洲区一区二| 99国产精品| 欧美激情中文字幕一区二区| 蜜桃av一区二区三区| 影音先锋日韩资源| 久久午夜av| 亚洲电影免费观看高清| 亚洲美女性视频| 欧美成人午夜剧场免费观看| 欧美黑人在线观看| 日韩性生活视频| 欧美揉bbbbb揉bbbbb| 一本色道久久88亚洲综合88| 亚洲图片在区色| 国产精品伦一区| 亚洲午夜精品久久久久久浪潮 | 怡红院精品视频| 毛片基地黄久久久久久天堂| 欧美激情成人在线| 在线一区二区三区做爰视频网站| 国产精品99免费看 | 欧美在线综合视频| 国产午夜精品一区二区三区欧美 | 午夜久久资源| 欧美阿v一级看视频| 亚洲美女毛片| 国产视频亚洲精品| 蜜乳av另类精品一区二区| 亚洲激情综合| 午夜亚洲福利| 在线观看av不卡| 欧美激情在线免费观看| 亚洲欧美精品一区| 91久久国产精品91久久性色| 亚洲一区亚洲| 在线欧美日韩国产| 欧美午夜一区二区三区免费大片| 欧美伊久线香蕉线新在线| 亚洲欧洲日本一区二区三区| 欧美一二区视频| 亚洲韩国青草视频| 国产精品美女久久久浪潮软件 | 欧美二区乱c少妇| 亚洲一本大道在线| 伊人婷婷久久| 国产丝袜一区二区三区| 欧美顶级艳妇交换群宴| 午夜欧美大尺度福利影院在线看| 亚洲国产另类精品专区| 久久久免费av| 亚洲欧美日韩国产另类专区| 亚洲第一色中文字幕| 国产精品久久综合| 欧美成人亚洲成人| 午夜亚洲精品| 亚洲一区欧美二区| 亚洲片在线资源| 欧美成人蜜桃| 久久深夜福利免费观看| 亚洲一区二区少妇| a91a精品视频在线观看| 亚洲黄色成人久久久| 好吊色欧美一区二区三区四区| 欧美午夜在线| 欧美日韩一区高清| 美女国产一区| 久久天堂av综合合色| 香蕉国产精品偷在线观看不卡| 夜夜嗨av一区二区三区四季av| 亚洲国产一区视频| 亚洲黄色三级| 亚洲国产成人91精品| 嫩草国产精品入口| 欧美成人免费全部| 欧美99在线视频观看| 玖玖玖免费嫩草在线影院一区| 久久精品视频免费播放| 亚洲欧美日韩一区| 亚洲午夜精品久久久久久app| 99re这里只有精品6| 亚洲美女啪啪| 一区二区欧美日韩视频| 亚洲少妇中出一区| 亚洲综合第一| 久久超碰97中文字幕| 久久久久九九九九| 久久免费国产精品| 欧美a级一区| 亚洲国产精品久久久久久女王| 亚洲黑丝一区二区| 亚洲精品日韩一| 亚洲午夜国产一区99re久久| 亚洲欧美成人网| 久久国产精品久久久久久久久久| 久久er99精品| 免播放器亚洲一区| 欧美日韩免费观看一区=区三区 | 亚洲欧美一区二区三区久久| 亚洲男同1069视频| 久久久蜜桃精品| 欧美成人小视频| 国产精品久久久久91| 国一区二区在线观看| 亚洲精品中文在线| 亚洲综合日韩中文字幕v在线| 欧美综合国产精品久久丁香| 玖玖视频精品| 亚洲人成在线观看| 亚洲一区在线免费| 欧美96在线丨欧| 国产精品久久一卡二卡| 在线精品国精品国产尤物884a| av成人动漫| 久久久www成人免费精品| 欧美a级一区| 亚洲一区二区久久| 老司机一区二区| 国产精品私房写真福利视频| 一区二区自拍| 欧美亚洲综合网| 亚洲美女av在线播放| 久久精品国产69国产精品亚洲| 欧美日韩精品福利|