1、臨界區只能用於物件在同一程序裡執行緒間的互斥訪問;互斥體可以用於物件程序間或執行緒間的互斥訪問。
2、臨界區是非核心物件,只在使用者態進行鎖操作,速度快;互斥體是核心物件,在核心態進行鎖操作,速度慢。
3、臨界區和互斥體在windows平台都下可用;linux下只有互斥體可用
互斥體物件用於程序間通訊:
multi_process_mutex.c
#include #include #include #include #include #include #define debug 1
#define share_key 0x1234
#define thread_num 4
typedef struct _share_stuff
share_stuff;
static share_stuff* stuff[thread_num];
void* threadb(void *prm);
int main(int argc,char** argv)
printf("shmid %d\n", shmid);
share_addr = (void*)shmat(shmid, (void*)0, 0);
if(share_addr < 0)
get the addr
#if debug
printf("share_addr:%x\n", (unsigned int)share_addr);
#endif
for(; i < thread_num; i++)
i = 0;
create_thread
pthread_condattr_t cond_attr;
pthread_condattr_init(&cond_attr);
pthread_condattr_setpshared(&cond_attr, pthread_process_shared);
pthread_mutexattr_t mutex_attr;
pthread_mutexattr_init(&mutex_attr);
pthread_mutexattr_setpshared(&mutex_attr, pthread_process_shared);
for(; i < thread_num; i++) }
pthread_condattr_destroy(&cond_attr);
pthread_mutexattr_destroy(&mutex_attr);
wait_for_done
for(i = 0; i < thread_num; i++)
#if debug
printf("all thread done!\n");
#endif
return 0;
}void* threadb(void *prm)
}
multi_process_mutex2.c
#include #include #include #include #include #include #define debug 1
#define share_key 0x1234
#define thread_num 4
typedef struct _share_stuff
share_stuff;
static share_stuff* stuff[thread_num];
void* threada(void *prm);
int main(int argc,char** argv)
printf("shmid %d\n", shmid);
share_addr = (void*)shmat(shmid,(void*)0,0);
if(share_addr < 0)
get the addr
#if debug
printf("share_addr:%x\n", (unsigned int)share_addr);
#endif
for(; i < thread_num; i++)
create_thread
for(i = 0; i < thread_num; i++) }
wait_for_done
for(i=0; i < thread_num; i++)
#if debug
printf("all thread done!\n");
#endif
return 0;
}void* threada(void *prm)
}
臨界區互斥
在考慮寫 之前應該先考慮我們要用什麼資料結構?以及該資料有什麼意義。p0 p1 在這裡,為了實現互斥使用了乙個共享變數turn。為什麼有效?在任意時刻turn的取值只能為0或1.因此條件while turn x 有且僅有乙個會被滿足,因而使得乙個程序得以訪問臨界區。至於turn被誰修改,什麼時候修改...
互斥鎖 臨界區 訊號量 事件的區別
引用位址 四種程序或執行緒同步互斥的控制方法 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。2 互斥量 為協調共同對乙個共享資源的單獨訪問而設計的。3 訊號量 為控制乙個具有有限數量使用者資源而設計。4 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開...
互斥鎖 臨界區 訊號量 事件的區別
四種程序或執行緒同步互斥的控制方法 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。2 互斥量 為協調共同對乙個共享資源的單獨訪問而設計的。3 訊號量 為控制乙個具有有限數量使用者資源而設計。4 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。臨界區...