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

T9的空間

You will never walk alone!

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  69 隨筆 :: 0 文章 :: 28 評論 :: 0 Trackbacks

線程函數
int pthread_equal(pthread_t tid1, pthread_t tid2)
pthread_t pthread_self(void)

int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr
     void* (*start_rtn)(void), void* restrict arg)

thread被創建的時候會繼承調用線程的浮點環境和信號屏蔽字,但是該線程的未決信號集將會被清楚,
清除未決信號集這件事情應該是沒有疑問的,在thread創建之前pending住的信號,不應該deliver給下一個
Ps: 線程的浮點環境指的是啥? 看來以后我應該去注意下浮點數的運算原理。

pthread相關的函數會直接返回錯誤碼,而不會和一些system call一樣,置全局errno,兩種方式都有好處,一個可以講返回值
帶回的錯誤代碼集中起來,范圍縮小;另外一個非常方便,關鍵點在于這一類共用errno的是否真的異常是可以共用的。

pthread_create返回之前有可能新的線程就已經開始run了

啟動函數 void* (*start_rtn)(void)

可以通過return給回來,也可以通過pthread_exit給
這個會存在一個地方
通過pthread_join(tid, void**)取回來

這里join的和java join是一樣的功能

如果這個東西是一個很大的東西:),那么放到heap是最好的選擇,不要放到stack上了,不然線程返回這東西就沒了,join取到的內存地址就變成一個無效的了,SIGSEGV就會被發出來

pthread_cancel,同一個進程可以call,提出請求終止線程

pthread_cleanup_push
pthread_cleanup_pop

線程分離,這樣子線程終止后可以釋放一些資源,而不用一定要其他人來join
方法有兩種,新建的時候加上分離屬性
    pthread_attr_init (&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ret = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL);

或者call pthread_detach(pthread_t tid)

線程互斥與同步

typedef struct
{
    
int volatile value;
}
 pthread_mutex_t;

多注意volatile變量,這個東西理論上就是讓編譯器不要做優化,不要cache volatile類型的變量,
每次都去內存地址中拿,而不是寄存器/高速緩存副本,這種變量極容易被編譯器不知道的人改變,例如其他線程。

靜態初始化:
#define  PTHREAD_MUTEX_INITIALIZER             {0}
#define  PTHREAD_RECURSIVE_MUTEX_INITIALIZER   {0x4000}
#define  PTHREAD_ERRORCHECK_MUTEX_INITIALIZER  {0x8000}
所謂的動態初始化
pthread_mutex_init; pthread_mutex_destroy

然后就是一些pthread mutex的基本處理函數了
lock,unlock
trylock;

這個trylock需要好好理解下,嘗試獲取lock,如果OK,那么lock他然后 return 0; 否則也不會suspend住,而是直接返回EBUSY

pthread_mutex_destroy, 會先去try lock,然后處理掉這個mutex的值。

這里稍微提一下

int pthread_mutex_trylock(pthread_mutex_t *mutex)
{
    
int mtype, tid, oldv, shared;

    
if (__unlikely(mutex == NULL))
        
return EINVAL;

    mtype  
= (mutex->value & MUTEX_TYPE_MASK);
    shared 
= (mutex->value & MUTEX_SHARED_MASK);

    
/* Handle common case first */
    
if ( __likely(mtype == MUTEX_TYPE_NORMAL) )
    
{
        
if (__atomic_cmpxchg(shared|0, shared|1&mutex->value) == 0{
            ANDROID_MEMBAR_FULL();
            
return 0;
        }


        
return EBUSY;
    }




__likely/__unlikely函數用來告訴編譯器優化代碼,類似if else中最有可能or最沒有可能發生的Case

mutex就有deadlock的問題,單線程,如果有代碼重入重復獲取鎖就會deadlock,因為你走不到你unlock的地方去;另外
常見的deadlock就是lock比較多,又沒有設計好順序,這個應該從業務邏輯上就應該定義好,當然有時候有的人用的時候or改代碼的時候
并沒有理清這些lock的關系,是否有dependency,比較難通過借用一些編譯系統來Cover住,然后改完就有bug。

然后還有一種需要設計好的是鎖的粒度
太粗太細都不好
粒度太粗,lock住的東西太多,很多線程都要等lock,最后這個東西會演變成一個串行的東西
粒度太細,lock又變的太多,不停的需要lock/unlock,performance就會變差。
目前看到的Android上的很多lock都太粗。

rw鎖 ->讀寫鎖
基本理念就是讀不會影響臨界區發生變化
所以讀模式的rw lock可以多個人占用,寫模式的rw lock時能被一個線程lock

只要有寫模式lock請求,那么后面的讀模式lock請求一般實現是都會被Suspend住,不然因為讀模式下,可以重復lock,如果不
suspend,那么寫模式的lock請求有可能永遠得不到相應。
rw鎖一般用在 read比 write行為多的多的場景,允許多線程并發去讀,單一線程去寫。

然后會想到spinlock,可以去網上search看下基本概念,spinlock一般在SMP架構下會比較有效果。

mutex是一種同步機制or講這是一種互斥機制 -> Java synchronize
還一種就是條件變量 condition.. -> wait/notify

這里有段話很好
條件變量給多個線程提供了一個回合的場所,條件變量與互斥量一起使用的時候,允許線程以無競爭方式等待特定的條件發生。

作業:
1.線程之間傳遞數據不要用stack變量,用放到下面這些地方的變量就好,RW/RO/ZI/Heap就沒事了
4.
現在一般都是這樣

    pthread_mutex_lock(&s_startupMutex);

    s_started = 1;
    pthread_cond_broadcast(&s_startupCond);

    pthread_mutex_unlock(&s_startupMutex);

會在broadcast后才unlock
否則有比較高的概率,unlock后,被其他線程將條件改掉,這個時候broadcast出去就沒有意義了。
但是這種也有可能會被另外一個線程,并非wait在那里的線程改變條件值

所以 pthread_cond_wait 返回并不意味著條件一定為真了
最好是always check條件
類似這種
    while (s_started == 0) {
        pthread_cond_wait(&s_startupCond, &s_startupMutex);
    }

posted on 2013-06-03 17:03 Torres 閱讀(218) 評論(0)  編輯 收藏 引用 所屬分類: APUE
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲卡通欧美制服中文| 99视频国产精品免费观看| 91久久精品网| 伊人久久亚洲热| 国产一区二区三区久久悠悠色av| 欧美视频免费在线观看| 国产精品久久久久久久久久免费 | 亚洲精品美女在线观看播放| 亚洲国产精品va在线看黑人| 亚洲高清激情| 中文一区二区| 久久gogo国模裸体人体| 久久久九九九九| 在线观看一区视频| 伊人久久综合| 日韩网站在线观看| 亚洲午夜国产成人av电影男同| 亚洲欧美激情精品一区二区| 欧美在线观看网址综合| 农夫在线精品视频免费观看| 亚洲大胆av| 亚洲香蕉在线观看| 久久一区二区三区av| 欧美日韩高清在线播放| 国产一区二三区| 日韩午夜高潮| 欧美专区日韩视频| 亚洲高清免费视频| 欧美一区二区三区免费大片| 国产精品一区二区视频| 亚洲激情一区二区三区| 亚洲国产精品成人综合| 香蕉成人久久| 欧美看片网站| 黄色另类av| 亚洲免费一区二区| 久久国产精品色婷婷| 1000部精品久久久久久久久| 亚洲毛片在线| 欧美在线视频免费| 亚洲精品国产精品国产自| 香蕉久久夜色| 国产精品hd| 91久久久亚洲精品| 久久久精品性| 亚洲主播在线观看| 欧美日韩性生活视频| 亚洲国产99精品国自产| 久久精品视频在线免费观看| 夜夜嗨av色综合久久久综合网| 蜜桃伊人久久| 在线观看一区二区视频| 久久久久久久久久码影片| 亚洲综合不卡| 国产精品美女久久久| 中文精品一区二区三区| 亚洲大胆av| 欧美成人免费视频| 亚洲人体一区| 亚洲欧洲日韩综合二区| 老司机午夜精品视频| 狠狠色丁香婷婷综合久久片| 久久成人羞羞网站| 欧美一级二级三级蜜桃| 国产午夜久久久久| 久久久久.com| 久久久久成人网| 亚洲高清视频的网址| 欧美福利视频一区| 蜜臀久久99精品久久久久久9| 亚洲电影免费观看高清完整版| 久久漫画官网| 美女啪啪无遮挡免费久久网站| 在线观看日韩欧美| 欧美激情bt| 欧美精品一区二区高清在线观看| 99re6这里只有精品视频在线观看| 亚洲国产欧美一区| 欧美日韩免费在线| 午夜视频精品| 久久久久久九九九九| 亚洲人妖在线| 在线视频精品| 韩国av一区二区三区在线观看 | 亚洲天堂av综合网| 亚洲欧美中文日韩在线| 国产一区二区三区久久 | 亚洲一区综合| 先锋影音国产一区| 亚洲国产福利在线| 久久精品国产91精品亚洲| 欧美日韩第一页| 午夜精品亚洲| 久久天堂精品| 亚洲一二三区精品| 久久精品视频在线免费观看| 亚洲美女区一区| 午夜影视日本亚洲欧洲精品| 最新日韩在线| 亚洲欧美久久久| 亚洲人成网站影音先锋播放| 亚洲在线观看| 亚洲免费av观看| 欧美在线视频免费| 亚洲一区二区三区四区中文| 久久视频这里只有精品| 亚洲一区bb| 欧美va天堂| 久久久中精品2020中文| 欧美日韩视频专区在线播放 | 欧美久久精品午夜青青大伊人| 亚洲欧美日韩视频二区| 欧美成人xxx| 久久女同精品一区二区| 欧美三区在线| 亚洲人成在线播放| 亚洲第一精品福利| 欧美在线黄色| 欧美自拍偷拍| 国产精品美腿一区在线看| 亚洲人成人99网站| 最新日韩在线视频| 蜜臀va亚洲va欧美va天堂| 久久婷婷亚洲| 狠狠色丁香久久综合频道 | 欧美日韩久久精品| 欧美va亚洲va香蕉在线| 国产一区二区三区四区老人| 在线一区二区三区四区五区| 99国产精品久久久久久久| 免费在线欧美黄色| 欧美高清免费| 亚洲区第一页| 欧美成人综合一区| 亚洲国产第一| 99精品国产一区二区青青牛奶| 免费在线观看日韩欧美| 欧美激情一区在线| 亚洲欧洲日本一区二区三区| 欧美99久久| 亚洲精品免费在线观看| 一区二区三区成人精品| 欧美日韩在线观看视频| 一区二区三区日韩欧美精品| 亚洲综合另类| 国产日韩一区二区| 久久激情五月丁香伊人| 免费av成人在线| 亚洲国产日韩在线| 欧美日韩喷水| 亚洲一区日韩在线| 久久人人超碰| 亚洲日本电影| 欧美视频一区二区三区| 亚洲女同精品视频| 久久精品视频va| 好看的亚洲午夜视频在线| 久久国产色av| 欧美国产91| 亚洲一区二区综合| 国产丝袜美腿一区二区三区| 久久久久天天天天| 亚洲精品国产日韩| 亚洲综合久久久久| 国产午夜精品在线观看| 久久一区中文字幕| 99re6这里只有精品视频在线观看| 亚洲午夜免费视频| 国内一区二区在线视频观看| 欧美黄在线观看| 亚洲欧美伊人| 亚洲激情六月丁香| 久久激情婷婷| 亚洲最新合集| 国产曰批免费观看久久久| 欧美大成色www永久网站婷| 亚洲一区二区久久| 欧美福利专区| 午夜免费久久久久| 亚洲片国产一区一级在线观看| 国产精品一二三视频| 欧美sm极限捆绑bd| 香蕉久久夜色精品国产| 日韩一级精品视频在线观看| 玖玖综合伊人| 午夜天堂精品久久久久| 亚洲精选视频在线| 精品成人一区| 国产精品网站在线播放| 欧美成人r级一区二区三区| 欧美一区二区高清在线观看| 亚洲美女黄色| 亚洲成人在线视频播放| 日韩亚洲欧美一区二区三区| 国产一区二区三区高清在线观看| 欧美激情国产精品| 久久看片网站| 久久国产精品第一页| 亚洲一区影音先锋| 在线视频欧美精品|