嵌入式 互斥鎖和讀寫鎖區別

2021-09-07 06:18:58 字數 1667 閱讀 5051

/*

* 執行緒同步——互斥量

* 建立兩個執行緒,使用互斥量使任一時刻只有乙個執行緒對全域性變數進行

操作* lzy 2011-6-19

*/#include 

#include 

#include 

pthread_mutex_t mutex;                    /* 定義

互斥量 */

int x;                                

/* 定義全域性變數 */

void thread1(void)                /* 定義執行緒1運

行的函式,其功能是對全域性變數x進行逐減操作 */

pthread_exit(null);

}void thread2(void)                /* 定義執行緒2運

行的函式,功能與thread2相同 */

pthread_exit(null);

}int main(void)

x=10;                                

/* 對全域性變數賦初值 */

ret = pthread_create(&id1, null, (void *)&thread1, null);    

/* 建立執行緒1 */

if(ret != 0)

ret = pthread_create(&id2, null, (void *)&thread2, null);    

/* 建立執行緒2 */

if(ret != 0)

pthread_join(id1, null);                /*執行緒

合併 */

pthread_join(id2, null);

return (0);}

/** 執行緒同步

* ——讀寫鎖 

*     只要沒有程序持有某個給定的讀寫鎖用於寫,那麼任意數目的

執行緒都可持有該讀寫鎖用於讀

*     僅當沒有執行緒持有某個給定的讀寫鎖用於讀或寫,才能分配該

讀寫鎖用於寫。

* lzy 2011-6-19

*/#include 

#include 

#include 

int product = 0;        //定義全域性變數

pthread_rwlock_t rwlock = pthread_rwlock_initializer;    //靜態

初始化讀寫鎖    

void * threadread(void * arg)            //執行緒函式讀 

}void * tidproduce(void * arg)    //執行緒函式寫 加1

}void * threadconsume(void * arg)    //執行緒函式寫 減1

}int main(void)

}if(pthread_create(&tidproduce, null, tidproduce, null))

if(pthread_create(&tidconsume, null, threadconsume, 

null))

pthread_exit(null);        //等待所有執行緒結束 

return 0;}

嵌入式 互斥鎖和讀寫鎖區別

執行緒同步 互斥量 建立兩個執行緒,使用互斥量使任一時刻只有乙個執行緒對全域性變數進行 操作 lzy 2011 6 19 include include include pthread mutex t mutex 定義 互斥量 int x 定義全域性變數 void thread1 void 定義執行...

嵌入式 自旋鎖 互斥鎖 讀寫鎖 遞迴鎖

互斥鎖 mutexlock 最常使用於執行緒同步的鎖 標記用來保證在任一時刻,只能有乙個執行緒訪問該物件,同一執行緒多次加鎖操作會造成死鎖 臨界區和互斥量都可用來實現此鎖,通常情況下鎖操作失敗會將該執行緒睡眠等待鎖釋放時被喚醒 自旋鎖 spinlock 同樣用來標記只能有乙個執行緒訪問該物件,在同一...

互斥鎖機制,互斥鎖與讀寫鎖區別

互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...