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

隨筆-162  評論-223  文章-30  trackbacks-0
   自旋鎖作為一種并發同步的手段,特別適用于競爭少和鎖時間短的情況,在驅動及內核代碼中經常被用到,本文講述一種適合用戶態程序的自旋鎖,支持Windows和Linux(GCC>=4.1.2)平臺,并提供了C語言的接口和實現。

接口
   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);

實現
 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 春秋十二月 閱讀(3078) 評論(3)  編輯 收藏 引用 所屬分類: C/C++

評論:
# re: 一種簡單的跨平臺用戶態自旋鎖 2012-06-13 22:57 | egmkang
lock的時候,可以先去獲取一下狀態,如果都是lock的,那么就沒有必要原子操作.
這樣效率會高一點.  回復  更多評論
  
# re: 一種簡單的跨平臺用戶態自旋鎖 2012-06-22 01:34 | tb
挺不錯的   回復  更多評論
  
# re: 一種簡單的跨平臺用戶態自旋鎖 2013-09-25 23:00 | egmkang
spin_lock的實現,其實最好的是先判斷一下,然后再去嘗試著原子操作;否則如果鎖碰撞比較大,會把很多實踐浪費在原子操作上,不劃算.
另外,把變量聲明成volatile貌似是不合適的吧.多線程和volatile沒有任何關系.
原子操作完成了,其他CPU里面看到的值就一定是最新的,至少在x86體系上面是這樣,如果是其他CPU貌似還要加一個barrier.  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲美女av电影| 1024国产精品| 久久久久久综合网天天| 欧美一区综合| 久久人人爽爽爽人久久久| 久久夜色精品国产欧美乱| 老司机精品视频网站| 欧美女同在线视频| 国产精品欧美日韩| 黄色亚洲网站| 亚洲美女av黄| 久久国产视频网| 欧美激情精品久久久久久| 99www免费人成精品| 午夜精品国产精品大乳美女| 久久天堂av综合合色| 欧美日韩播放| 国产自产v一区二区三区c| 日韩亚洲成人av在线| 午夜在线观看欧美| 免费影视亚洲| 亚洲一区二区三区在线播放| 久久一区免费| 国产精品久久毛片a| 亚洲二区精品| 欧美主播一区二区三区美女 久久精品人 | 美女日韩欧美| 欧美午夜欧美| 亚洲日本视频| 久久色在线播放| 一区二区不卡在线视频 午夜欧美不卡在| 午夜一级久久| 国产精品免费aⅴ片在线观看| 亚洲激情国产| 久久久亚洲综合| 亚洲一区二区网站| 欧美女同在线视频| 亚洲国产综合91精品麻豆| 午夜在线精品| 亚洲一区二区三区精品在线| 欧美日韩另类国产亚洲欧美一级| 激情国产一区二区| 欧美专区福利在线| 亚洲视频在线观看网站| 欧美理论电影在线观看| 在线看视频不卡| 美女精品视频一区| 欧美在现视频| 亚洲国产高清aⅴ视频| 国产欧美一级| 99精品热6080yy久久| 欧美成人蜜桃| 久久精品99无色码中文字幕| 国产精品自拍网站| 宅男66日本亚洲欧美视频| 亚洲电影在线播放| 久久精品亚洲精品国产欧美kt∨| 国产精品久久一区主播| 亚洲自拍偷拍一区| 99热精品在线| 国产精品久久久久99| 亚洲专区一区二区三区| 一本久久综合亚洲鲁鲁五月天| 欧美日本国产精品| 亚洲一区久久久| 中文在线资源观看视频网站免费不卡| 欧美午夜激情视频| 亚洲欧美日韩天堂| 亚洲影视综合| 国产一区自拍视频| 女同性一区二区三区人了人一| 午夜视频在线观看一区| 蜜桃久久av| 亚洲精品一区中文| 欧美亚一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 99视频日韩| 欧美日韩成人综合天天影院| 亚洲精一区二区三区| 亚洲精品久久久久久久久久久久久 | 中文av一区特黄| 在线一区视频| 国产欧美日韩| 久久综合九色欧美综合狠狠| 久久精品二区三区| 日韩视频中文字幕| 午夜精品久久一牛影视| 国产欧美日韩在线观看| 麻豆精品精品国产自在97香蕉| 欧美成年人视频| 亚洲无限av看| 久久精品亚洲热| 一区二区三区视频在线看| 亚洲一区二区三区777| 亚洲第一天堂无码专区| 亚洲精品一二区| 国产一区高清视频| 亚洲精品人人| 激情欧美一区二区三区| 一本色道久久综合亚洲91| 国产日韩一区在线| 亚洲精品男同| 国产精品系列在线播放| 99re热这里只有精品免费视频| 亚洲午夜久久久| 狠狠色狠色综合曰曰| 日韩视频免费观看高清完整版| 国产日韩欧美另类| 亚洲另类春色国产| 在线看欧美日韩| 午夜精品国产精品大乳美女| 一本久久a久久精品亚洲| 久久精品91久久久久久再现| 在线视频免费在线观看一区二区| 久久久久一区| 久久精品一区二区三区不卡牛牛| 欧美精品亚洲二区| 欧美va亚洲va香蕉在线| 国产模特精品视频久久久久| 亚洲黑丝在线| 亚洲国产精品久久精品怡红院| 午夜精品一区二区在线观看| 亚洲视频精选| 欧美日本不卡高清| 亚洲精华国产欧美| 91久久精品国产91久久| 久久国产乱子精品免费女| 性欧美大战久久久久久久久| 欧美精品日本| 91久久精品国产91久久| 亚洲国产视频直播| 麻豆亚洲精品| 欧美高清自拍一区| 亚洲第一页在线| 久久人人97超碰国产公开结果| 久久精品理论片| 国产亚洲一级高清| 欧美伊久线香蕉线新在线| 久久精品国产清高在天天线| 国产区亚洲区欧美区| 亚洲一区二区三区免费观看| 亚洲欧美一区二区激情| 国产精品久久久久影院色老大 | 女仆av观看一区| 亚洲大胆av| 欧美成人午夜激情| 亚洲国产成人av在线| 亚洲精品孕妇| 欧美色欧美亚洲另类七区| 一级日韩一区在线观看| 亚洲欧美一区在线| 国产欧美日韩免费| 久久久精品一区| 亚洲国产精品一区二区www| 亚洲精品综合精品自拍| 欧美日韩第一区| 亚洲一区二区三区高清| 久久久久女教师免费一区| 亚洲国产aⅴ天堂久久| 欧美韩国一区| 亚洲在线观看视频| 免费成人黄色av| 一个人看的www久久| 国产女人水真多18毛片18精品视频| 欧美一区二区性| 亚洲国产精品va在看黑人| 亚洲私人黄色宅男| 极品尤物一区二区三区| 亚洲精品网站在线播放gif| 久久精品卡一| 精品电影在线观看| 免费观看久久久4p| 最新热久久免费视频| 亚洲在线成人| 亚洲电影激情视频网站| 国产精品高潮呻吟| 久久精品国产亚洲一区二区| 亚洲级视频在线观看免费1级| 亚洲欧美中文另类| 亚洲精品1区2区| 国产精品久久久久9999| 久久伊人精品天天| 亚洲欧美成人一区二区三区| 亚洲第一黄色| 久久色中文字幕| 亚洲一区一卡| 亚洲人妖在线| 在线观看亚洲专区| 国产精品区二区三区日本| 欧美黄色小视频| 久久久91精品国产| 午夜精品久久久久久99热软件| 亚洲欧洲日韩女同| 欧美高清视频在线播放| 久久国产黑丝| 欧美一区视频在线| 亚洲——在线| 一本色道久久精品| 亚洲伦伦在线| 亚洲精品一级|