专用的基本数据类型:ios
char signed char unsigned char short unsigned short int unsigned int long unsigned long long long unsigned long long char16_t char32_t wchar_t extended integral types (if any)
附加的成员函数:segmentfault
atomic::fetch_add atomic::fetch_sub atomic::fetch_and atomic::fetch_or atomic::fetch_xor atomic::operator++ atomic::operator-- operator (comp. assign.)
原子操做还部分专用于指针类型,具备一下附加成员函数:异步
atomic::fetch_add atomic::fetch_sub atomic::operator++ atomic::operator-- operator (comp. assign.)
std::asyncasync
enum class launch : /* unspecified */ { async = /* unspecified */, deferred = /* unspecified */, /* implementation-defined */ };
#include <iostream> #include <future> #include <thread> using namespace std; bool async_func () { cout << "async_func begin " << std::this_thread::get_id() << endl; cout << "async_func end" << endl; return true; } int main () { cout << "main begin " << std::this_thread::get_id() << endl; std::future<bool> fut = std::async (launch::async, async_func); // 建立新线程并调用线程入口函数 cout << fut.get() << endl; cout << "main end" << endl; return 0; }
输出:函数
main begin 1 async_func begin 2 async_func end 1 main end
#include <iostream> #include <future> #include <thread> using namespace std; bool async_func () { cout << "async_func begin " << std::this_thread::get_id() << endl; cout << "async_func end" << endl; return true; } int main () { cout << "main begin " << std::this_thread::get_id() << endl; std::future<bool> fut = std::async (launch::deferred, async_func); if (fut.wait_for(std::chrono::microseconds(0)) == std::future_status::deferred) // 检查是不是 launch::deferred { cout << "std::future_status::deferred" << endl; } cout << fut.get() << endl; // 入口函数被调用 cout << "main end" << endl; return 0; }
输出:[注意两处打印的线程id]fetch
main begin 1 std::future_status::deferred async_func begin 1 async_func end 1 main end
std::future<bool> fut = std::async (launch::async|launch::deferred, async_func); == std::future<bool> fut = std::async (async_func);