mudu庫學習篇 mutex類封裝學習

2021-09-24 02:07:15 字數 2215 閱讀 9406

mutex.h

namespace muduo

;class capability("mutex") mutexlock : noncopyable

~mutexlock()

// must be called when locked, i.e. for assertion

bool islockedbythisthread() const

void assertlocked() const assert_capability(this)

// internal usage

void lock() acquire()

void unlock() release()

pthread_mutex_t* getpthreadmutex() /* non-const */

private:

friend class condition;

class unassignguard : noncopyable

~unassignguard()

private:

mutexlock& owner_;

};void unassignholder()

void assignholder()

pthread_mutex_t mutex_;

pid_t holder_;

};// use as a stack variable, eg.

// int foo::size() const

// class scoped_capability mutexlockguard : noncopyable

~mutexlockguard() release()

private:

mutexlock& mutex_;

};} // namespace muduo

// prevent misuse like:

// mutexlockguard(mutex_);

// a tempory object doesn't hold the lock for long!

#define mutexlockguard(x) error "missing guard object name"

#endif // muduo_base_mutex_h

mutex.h中有對mutex的封裝的mutexlock類,還有基於mutexlock封裝的mutexlockguardc++11中mutex,c++11中也對mutex進行封裝,使用方式和muduo庫差不多,同時c++11中也有類似mutexlockguard的實現,下面我來介紹一下c++11中基於mutex封裝的lock_guard和unique_lock;

#include #include #include #include #include std::mutex my_lock;

void add(int &num, int &sum)

else

//sleep(100);

}

}int main()

std::for_each(ver.begin(), ver.end(), std::mem_fn(&std::thread::join)); //join

std::cout << sum << std::endl;

}

#include // std::cout

#include // std::thread

#include // std::mutex, std::unique_lock

#include std::mutex mtx; // mutex for critical section

void add(int &num, int &sum)

else

lock.unlock(); //釋放鎖

sleep(10);

lock.lock();//再次上鎖,最後一次上鎖可以不用解鎖

sum += num; }}

int main()

std::for_each(ver.begin(), ver.end(), std::mem_fn(&std::thread::join)); //join

std::cout << sum << std::endl;

return 0;

}

執行緒學習9 Mutex類

互斥 在作業系統中,許多執行緒常常需要共享資源,而這些資源往往要求一次只能為乙個執行緒服務 排他性 這種排他性地使用共享資源稱為執行緒間的互斥。執行緒互斥實質上也是同步,可以看做一種特殊的執行緒同步。mutex類 執行緒的互斥常用mutex類實現,利用它可以對資源進行獨占性訪問。與monitor類相...

muduo庫學習篇 Thread類學習

多執行緒程式設計在任何語言中基本都是乙個繞不開的話題,如果我們想要發揮計算機多核的優勢,提高程式的響應速度,就一定要使用到多執行緒程式設計技術。因此muduo庫一定少不了thread的封裝,接下來我們開始學習muduo庫thread類的封裝。如果讓我自己設計乙個thread類的話我能想到的有哪些 上...

C IO庫學習篇

io庫型別和標頭檔案 頭檔案型別 iostream istream 從流中讀取資料 ostream 向流寫入資料 iostream 讀寫流 fstream ifstream 從檔案中讀取資料 ofstream 檔案寫入資料 fstream 讀寫檔案 sstream istringstream 從st...