• 信号量,锁,条件变量的区别


    互斥锁

    [plain] view plaincopy
    1. pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;  
    2. 或  
    3. pthread_mutex_t mutex;  
    4. int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)  
    5. int pthread_mutex_lock(pthread_mutex_t *mutex)  
    6. int pthread_mutex_unlock(pthread_mutex_t *mutex)  
    7. int pthread_mutex_trylock(pthread_mutex_t *mutex)  


    信号量

    [plain] view plaincopy
    1. sem_t sem_event;  
    2. int sem_init(sem_t *sem, int pshared, unsigned int value)   
    3. int sem_destroy(sem_t * sem)   
    4. int sem_post(sem_t * sem)  
    5. int sem_wait(sem_t * sem)  
    6. int sem_trywait(sem_t * sem)  
    7. int sem_getvalue(sem_t * sem, int * sval)  


    条件变量

    [plain] view plaincopy
    1. pthread_cond_t cond=PTHREAD_COND_INITIALIZER;  
    2. 或  
    3. pthread_cond_t cond;  
    4. int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)  
    5. int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)  
    6. int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t   
    7. *mutex, const struct timespec *abstime)  
    8. pthread_cond_signal()  

    互斥锁没什么好说的。成对出现。

    关键是信号量和条件变量的使用场合。

    以下两篇文章。

    1:讲述:基本定义和用法

    Posix线程编程指南(3)

    http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part3/

    2:一篇博客讲解区别

    http://www.cnblogs.com/lonelycatcher/archive/2011/12/20/2294161.html

    根据第二个博客的理解应该是:

    线程同步:何时互斥锁不够,还需要条件变量?

    假设有共享的资源sum,与之相关联的mutex 是lock_s.假设每个线程对sum的操作很简单的,与sum的状态无关,比如只是sum++.

    那么只用mutex足够了.程序员只要确保每个线程操作前,取得lock,然后sum++,再unlock即可.简单的理解是,资源是很纯粹的,

    没有顺序上的概念。

     

    再看信号灯和条件变量

    一般的生产者和消费者模型下,比如一个队列。还是应该使用信号灯,因为,信号灯是计数器,这样队列便可长可短。

    但是如果涉及到某个条件的控制或者检测,而不想用sleep的方法,顾名思义,就应当使用条件变量。

     


    转自:http://blog.csdn.net/cjsafty/article/details/7850293

  • 相关阅读:
    好看的壁纸网站
    python简介
    python学习之基本语法(1)
    信息系统开发方法
    数据库连接池的使用小结
    软件版本后的字母含义
    信息系统与信息化
    软考
    实施过程中的项目管理
    mysql查SQL执行速度
  • 原文地址:https://www.cnblogs.com/catkins/p/5270395.html
Copyright © 2020-2023  润新知