美文网首页
多线程相关

多线程相关

作者: 不ai吃糖 | 来源:发表于2020-06-03 09:50 被阅读0次

在c++中使用std::thread定义线程对象,一个对象对应一个线程,几个线程可以在多线程设备上同时运行,测试用例如下:

<code>

// thread example

#include <iostream>      // std::cout

#include <thread>        // std::thread

void foo()

{

  // do stuff...

}

void bar(int x)

{

  // do stuff...

}

int main()

{

  std::thread first (foo);    // spawn new thread that calls foo()

  std::thread second (bar,0);  // spawn new thread that calls bar(0)

  std::cout << "main, foo and bar now execute concurrently...\n";

  // synchronize threads:

  first.join();                // pauses until first finishes

  second.join();              // pauses until second finishes

  std::cout << "foo and bar completed.\n";

  return 0;

}

</code>

output

<code>

main, foo and bar now execute concurrently...

foo and bar completed.

</code>

std::thread_local 变量

被thread_local修饰的变量存在于整个线程周期,在线程开始时被生成,在线程结束时被销毁

参考链接:https://www.cnblogs.com/pop-lar/p/5123014.html

std::mutex 互斥锁

用于保存某一线程中的重要区域(critical section),该区域内的代码必须在当前线程内连续执行,mutex会发出信号保证当前线程的该段代码能够独占资源,等运行完之后再解锁。

<code>

// mutex example

#include <iostream>      // std::cout

#include <thread>        // std::thread

#include <mutex>          // std::mutex

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

void print_block (int n, char c) {

  // critical section (exclusive access to std::cout signaled by locking mtx):

  mtx.lock();

  for (int i=0; i<n; ++i) { std::cout << c; }

  std::cout << '\n';

  mtx.unlock();

}

int main ()

{

  std::thread th1 (print_block,50,'*');

  std::thread th2 (print_block,50,'$');

  th1.join();

  th2.join();

  return 0;

}

output:

**************************************************

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

</code>

若去掉互斥锁,则运行结果为:

$$$$$$$$$$$$$$$$$*$$**$**$*$*$$**$*$$*$*$*$*$*$*$*$*$***$*$***$*$***$*$$$*$*$**$*$$$*$**

************

在这个程序中,加上互斥锁之后使得两个线程顺序执行。

相关文章

  • 多线程相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 GCD NSOperation...

  • 网络相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 HTTP协议 HTTPS与网络...

  • iOS面试

    目录 UI视图相关 存储相关 OC 语言特性相关 Runtime相关 内存管理相关 Block相关 多线程相关 R...

  • iOS多线程之NSOperations

    相关文章:iOS多线程之NSThreadiOS多线程之GCD NSOperation(任务)与NSOperatio...

  • Android下多线程的实现

    Android下多线程相关 线程安全相关问题参考:java内存模型与线程 android下与多线程有关的主要有以下...

  • OC 语言相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 分类 关联对象 扩展 代理 通...

  • 多线程相关

    1、Thread/runnable 1)继承Thread类 2)实现Runnable接口 2、两种启动线程方法的区...

  • 多线程相关

    1.GCD 同步/异步和串行/并发 dispatch_barrier_async dispatch_group (...

  • 多线程相关

  • 多线程相关

    1. 多线程使用的优缺点? 优点: (1)多线程技术使程序的响应速度更快 (2)当前没有进行处理的任务可以将处理器...

网友评论

      本文标题:多线程相关

      本文链接:https://www.haomeiwen.com/subject/zydpzhtx.html