什麼情況下需要用到鎖呢,就是多執行緒在使用同乙個資源(變數),比如,在類a中有乙個變數int i,a建立了3個執行緒,i作為變數傳遞給了這3個執行緒,每個執行緒都需要對這i進行修改,那麼在使用 i 的時候,這3個執行緒都需要進行鎖操作。
第一步 宣告純虛類:
class lock
/*** 加鎖
*/virtual void acquire() = 0;
/*** 嘗試加鎖
* @return 加鎖成功則返回true, 否則返回false
*/virtual bool tryacquire() = 0;
/*** 解鎖
*/virtual void release() = 0;
};第二步 宣告 鎖類,繼承純虛類
class mutex : public lock;
實現:mutex::mutex()
rc = pthread_mutexattr_settype(&attr, pthread_mutex_errorcheck);
if (rc)
rc = pthread_mutex_init(&_mutex, &attr);
if (rc)
rc = pthread_mutexattr_destroy(&attr);
if(rc != 0)
}mutex::~mutex()
}void mutex::acquire()
}bool mutex::tryacquire()
return rc == 0;
}void mutex::release()
}
互斥鎖機制,互斥鎖與讀寫鎖區別
互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...
鎖 互斥鎖,死鎖
當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制 執行緒同步能夠保證多個執行緒安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入乙個狀態 鎖定 非鎖定 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為 鎖定 其他執行緒不能更改 直到該執行緒釋放資源,將資源的狀態變...
執行緒 互斥鎖
include include include include include 1.靜態初始化,當動態初始化時,遮蔽靜態初始化 pthread mutex t mutex pthread mutex initializer 2.動態初始化 pthread mutex t mutex int lock...