執行緒中呼叫fork函式,鎖的變化
一、執行緒中呼叫fork函式鎖的變化
舉例說明:在下列程式碼中的排程變化。
但是在fork前加鎖再解鎖不安全,所以在fork函式裡引用pthread_atfork(prepare,parent,child).其中三個引數均為函式指標。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#include <pthread.h>
pthread_mutex_t mutex;
void* fun(void *arg)
{
printf("fun will get mutex\n");
pthread_mutex_lock(&mutex);
printf("fun lock success\n");
sleep(5);
pthread_mutex_unlock(&mutex);
printf("fun unlock\n");
}
void prepare()
{
pthread_mutex_lock(&mutex);
}
void parent()
{
pthread_mutex_unlock(&mutex);
}
void child()
{
pthread_mutex_unlock(&mutex);
}
void main()
{
pthread_mutex_init(&mutex,NULL);
pthread_t th;
int res=pthread_create(&th,NULL,fun,NULL);
assert(res==0);
sleep(2);
pthread_atfork(prepare,parent,child);
pid_t pid=fork();
assert(pid!=-1);
if(pid==0)
{
printf("child will get mutex\n");
pthread_mutex_lock(&mutex);
printf("child lock success\n");
sleep(2);
pthread_mutex_unlock(&mutex);
printf("child unlock\n");
}
else
{
printf("father will get mutex\n");
pthread_mutex_lock(&mutex);
printf("father lock success\n");
sleep(2);
pthread_mutex_unlock(&mutex);
printf("father unlock\n");
}
}
列印結果:
fun will get mutex
fun lock success
fun unlock
father will get mutex
father lock success
child will get mutex
child lock success
father unlock
child unlock
相關文章
- 執行緒中的死鎖執行緒
- 【圖文】函式呼叫過程中棧的變化函式
- C++11 中的執行緒、鎖和條件變數C++執行緒變數
- 執行緒中的幾個退出相關函式執行緒函式
- Qt 子執行緒呼叫connect/QMetaObject::invokeMethod 不呼叫槽函式問題QT執行緒Object函式
- 多執行緒常用函式執行緒函式
- 在單獨執行緒中執行物件成員函式 (轉)執行緒物件函式
- Java執行緒:執行緒的同步與鎖Java執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 執行緒同步及執行緒鎖執行緒
- 1程式與執行緒以及Linux中fork()的運用執行緒Linux
- 執行緒的互斥鎖執行緒
- 執行緒安全與鎖最佳化執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- 關於執行緒的幾個函式執行緒函式
- python中5種執行緒鎖Python執行緒
- .NET中各種執行緒同步鎖執行緒
- java 執行緒鎖物件鎖的理解Java執行緒物件
- 多執行緒_鎖執行緒
- 執行緒鎖(四)執行緒
- Java執行緒面試題(02) Java執行緒中如何避免死鎖Java執行緒面試題
- 執行緒join為什麼在解構函式中執行緒函式
- linux中fork()函式詳解Linux函式
- fork函式與vfork函式函式
- c++ 執行緒函式傳遞資料 物件和變數C++執行緒函式物件變數
- 多執行緒中的鎖系統(四)-談談自旋鎖執行緒
- 多執行緒安全strtok函式MStrTok執行緒函式
- Linux 中的 fork() 函式例項解析Linux函式
- JavaScript中的立即執行函式JavaScript函式
- fork()函式的基本用法函式
- performSelector:withObject:afterDelay: 在子執行緒中呼叫不執行performSelectorObject執行緒
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- javascript中的自執行(立即執行)函式(function(){…})()JavaScript函式Function
- 執行緒和鎖,鎖升級執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- Java中ThreadLocal無鎖化執行緒封閉實現原理Javathread執行緒
- 多執行緒安全性和Java中的鎖執行緒Java