zoukankan      html  css  js  c++  java
  • 多线程

    #线程相对于进程的优点:

      线程的创建和上下文切换比进程的创建和上下文切换更快。

      线程间交换数据时无需特殊技术。

    #线程和进程的差异: 

      多进程>每个进程的内存空间都由保存全局变量的“数据区”、malloc等函数动态分配提供空间的堆(Heap)、函数运行时使用到的栈(Stack)构成。每个进程都具有这种独立空间。

      多线程>多个线程将共享数据区和堆。

    #多个线程同时调用函数时(执行时)可能产生问题。这类函数内部存在临界区(多个线程同时执行这部分代码时,可能引起问题)

      根据临界区是否引起问题,函数分为两类:线程安全函数,非线程安全函数。

      线程安全函数的名称后缀一般为_r

      多个线程访问同一变量会产生问题,一个线程访问变量时应该阻止其他线程访问。这就是同步。

      临界区:临界区并非变量本身,而是访问变量和计算过程的语句。这些语句可能由多个线程同时运行,这也是引起问题的直接原因。

    #线程同步

      同步的情况从两方面考虑:

        同时访问同一内存空间时发生的情况

        需要指定访问同一内存空间的线程执行顺序的情况

      互斥量:

        互斥量的创建及销毁函数

         #include<pthread.h>  

         int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); 

         int pthread_mutex_destroy(pthread_mutex_t *mutex);    

          ·mutex 创建和销毁互斥量时传递保存互斥量的变量地址值

         ·attr 传递即将创建的互斥量属性,没有特别需要指定的属性时传递NULL 

        →成功时返回0,失败返回其他值 

        利用互斥量锁住或释放临界区时使用的函数

         int pthread_mutex_lock(pthread_mutex_t *mutex); 

         //临界区的开始 

         //...........

         //临界区的结束 

         int pthread_mutex_unlock(pthread_mutex_t *mutex); 

        成功时返回0,失败返回其他值 

        死锁:线程退出临界区时,如果没有调用pthread_mutex_unlock函数,其他为了进入临界区而调用

           pthread_mutex_lock的线程就无法摆脱阻塞状态。这种情况就是死锁(Dead-lock)

      信号量:

  • 相关阅读:
    收集起来先
    asp .net 页面回车触发button 按钮事件
    关于SQL 数据库表中的聚集索引和非聚集索引等
    WinForm换肤操作(用IrisSkin2.dll)
    生成Word文档的相关操作
    API自动化测试测试数据集
    API文档实践
    使用eolinker对API测试的响应结果进行断言
    API自动化定时测试
    接口测试之对数据进行RSA加解密
  • 原文地址:https://www.cnblogs.com/itsad/p/8053577.html
Copyright © 2011-2022 走看看