Linux C++:多线程-互斥锁

    以前学过c的多线程任务和锁一些相关知识,由于工作原因做Android去了,很多东西也都忘记的差不多了,现在趁学C++时来重新回顾复习一些,因为C++是C的加强版很多东西都是兼容的,因此学起来也比较容易。 

多线程:多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。

  • 基于进程的多任务处理是程序的并发执行。
  • 基于线程的多任务处理是同一程序的片段的并发执行。

多线程的优点:

  1. 无需跨进程边界;
  2. 程序逻辑和控制方式简单;
  3. 所有线程可以直接共享内存和变量等;
  4. 线程方式消耗的总资源比进程方式好;

多线程的缺点:

  1. 每个线程与主程序共用地址空间,受限于2GB地址空间;
  2. 线程之间的同步和加锁控制比较麻烦;
  3. 一个线程的崩溃可能影响到整个程序的稳定性;
  4. 线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU;

线程互斥锁:

    由于多线程是共享进程资源,并发执行。当某个线程访问资源时,其它线程就不可以访问,只能等到该线程运行完这片段后才才可以运行。这个需要lock。

锁的实现:

pthread_mutex_t mutex1; //mutex1声明格式:
pthread_mutex_init(&mutex1,NULL); //初始化互斥锁
pthread_mutex_lock(&mutex1); //加锁
pthread_mutex_trylock(&mutex1);//试着去加锁
pthread_mutex_unlock(&mutex1); //去锁
pthread_mutex_destroy(&mutex1); //释放锁资源。

示例(链接-lpthread): 

#include 
#include 
#include 

using namespace std;

pthread_mutex_t mutex1 ;

void *myid1(void *arg)
{
    pthread_mutex_lock(&mutex1); //上锁
    int a = *((int *)arg);
    for(int i = 0; i < 5;i++)
    {
        // sleep(1);
        cout<<"__"<

待续...

你可能感兴趣的:(C++)