一个简单例子:启动一个线程,然后等它结束:
6 | std:: thread t(foo); // Starts. Equal to CreateThread. |
7 | t.join(); // Equal to WaitForSingleObject to the thread handle. |
与win32线程不同,你可以在这里传递参数:
7 | std:: thread t(foo,4,5); // Acceptable. |
| 9}
这样,通过传递‘this’指针给std::thread让成员函数成为一个线程,变成了一件很简单的事情.如果std::thread得以析构,而你没有调用join(),它将会异常终止。脱离c++封装运行线程: 7 | // 在这里已经调用了detach方法,c++对象从win32对象中脱离出来,如果此时还调用join方法,就会抛出std::system_error() |
|
使用互斥(Mutex)
std::mutex与win32的临界区(cirtical section)很类似。lock()如同EnterCriticalSection,unlock如同LeaveCriticalSection,try_lock则像TryEnterCriticalSection。
如上,你在lock一个 std::mutex 对象之后必须解锁(unlock)。如果你已经对其加锁,你不能再次lock。
评论