c++11 并发之旅【一】

什么是并发

并发是指多个独立的任务同时进行。并发在我们的生活中随处可见,如:走路的时候可以打电话,一边唱歌一边跳舞,小到原子(每个核外电子同时绕着原子核高速的运转),大到宇宙各个天体按照自己的轨迹同时相互独立的运行着这些都可以看作是并发。

计算机世界的并发

  • 【单核CPU】单核系统上的并发并非真正物理结构的并发,它是通过在核心cpu上切换多个任务达到并发的假象让人以为两个应用或者任务在同时进行,但是实际上他是通过时间切片在短时间内进行任务切换的。

  • 【多核CPU】相比于单核系统多核系统实现了真正物理意义上面的并发,不同的应用或者任务可以被分到不同CPU上去完成。

并发的实现途径

  • 【多进程】操作系统提供了进程间的保护操作和通讯机制,可以比线程更容易的编写安全的并发代码。并且可以运行在同一台机器或者不同的机器上面。利用网络使得这种并发的可用性和可行性有很大的用处。

  • 【多线程】相比于多进程线程是轻量级的,不需要想进程那样要在启动的时候占据额外的开销。并且线程中全局数据仍然是全局的,这使得线程间通讯很容易,但这就得程序员自己管理这种共享,来避免出现不必要的冲突和歧义。

C++0x线程库
///[Member functions]
//默认构造函数
thread() noexcept;
//初始化构造函数
template <class Fn, class... Args>
explicit thread (Fn&& fn, Args&&... args);
//拷贝构造函数,线程对象无法被拷贝
thread(thread&) = delete;
thread(const thread&) = delete;
thread& operator=(const thread&) = delete;
//移动构造函数
thread(thread&& __t) noexcept
{ swap(__t); }
thread& operator=(thread&& __t) noexcept
{
  if (joinable())std::terminate();
  swap(__t);
  return *this;
}
//析构函数
~thread()
{if (joinable())std::terminate();}
//获得CPU核心数
static unsigned int hardware_concurrency();
//获得原生的线程标识
thread::native_handle_type native_handle();
//获得c+0x提供的线程标识
thread::id get_id() const noexcept
//交换线程状态
void swap(thread& __t) noexcept
{ std::swap(_M_id, __t._M_id); }
//whether the thread object is joinable.
bool joinable() const noexcept
{ return !(_M_id == id()); }
//The function returns when the thread execution has completed.
void join();
//分离线程让线程自己去运行
void detach();
/************************************/
//[namespace] this_thread
//Returns the thread id of the calling thread
thread::id get_id() noexcept
//是让当前线程让让出自己的CPU时间片给其他线程使用)
void yield() noexcept
//
void __sleep_for(chrono::seconds, chrono::nanoseconds);
//
template<typename _Rep, typename _Period>
void sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
//
template<typename _Clock, typename _Duration>
void sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)

开启并发世界

#include <iostream>
#include <functional>
#include <thread>
#include <string>
using namespace std;

void hello_thread(const std::string& thread_name)
{
    cout<<"["<<this_thread::get_id()<<"]-->"
        <<thread_name<<"-->"
        <<"Hello World"<<endl;
}


int main(int argc, char *argv[])
{
    thread th1,th2(hello_thread,"th2"),th3(std::move(th2));
    th1.joinable()?th1.join(),1:0;
    th2.joinable()?th2.detach(),1:0;
    th3.joinable()?th3.join(),1:0;

    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,350评论 8 265
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,533评论 0 5
  • 余永红又搅扰你了。 现在想来99年怎么会到都昌,可能命运就是让我遇到你。没恋爱,却尝到了失恋的滋味。我对你...
    搞定自己阅读 128评论 0 0
  • 大概,我是个没人要的孩子。 中午在食堂,夹起菜。我却突然想起来,自己小时候偷偷吃辣条买方便面吃的时光。可能,那是最...
    苍穹听雨阅读 609评论 0 3
  • 时间啊!时间!你为什么过得那么快! 身在2O17的我,一眨眼又快到新的一年! 时间啊!时间!多希望你能走慢点! 因...
    璃子沫阅读 350评论 0 0