笔记整理—linux进程部分(9)互斥锁

        互斥锁也叫互斥量,可以看作一种特殊的信号量。信号量可以>=0,大家可以排队使用信号量,互斥锁只有0、1,主要实现关键段保护,只能在某一时间给某一任务去调用这段资源,这段内容用之前上锁,用完时候解锁。

pthread_mutex_init()//申请互斥锁
pthread_mutex_destroy//销毁互斥锁
pthread_mutex_lock()//上锁
pthread_mutex_unlock()//解锁

        pthread_mutex_t mutex;定义互斥锁

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

void *func(void *arg)
{
    sleep(1);//不与主线程抢占第一次上锁
    while(0==flag)
    {
        pthread_mutex_lock(&mutex);
        ......处理......
        pthread_mutex_unlock(&mutex);
        sleep(1);//不与主线程抢资源获取的锁
    }
    pthread_exit(NULL);//线程退出
}

int main(void)
{
    pthread_mutex_init(&mutex,NULL);互斥锁初始化
    ret=pthread_create(&th,NULL,func,NULL);线程创建
    while(1)
    {
        pthread_mutex_lock(&mutex);
        scanf("%s",buf);
        pthread_mutex_unlock(&mutex);
        ......此时子线程解锁处理资源......
        sleep(1);//不与子线程抢处理
    }
    ret=pthread_join(th,NULL);//线程回收
    pthread_mutex_destroy(&mutex);//销毁互斥锁
}

        条件变量方式实现线程同步,首先这是线程特有的方法,支持阻塞与唤醒。

int pthread_cond_init(pthread_cond_t *restrict cond,
           const pthread_condattr_t *restrict attr);//初始化

int pthread_cond_destroy(pthread_cond_t *cond);//销毁
int pthread_cond_wait(pthread_cond_t *restrict cond,
           pthread_mutex_t *restrict mutex);//等待
int pthread_cond_signal(pthread_cond_t *cond);//发信号一对一
int pthread_cond_broadcast(pthread_cond_t *cond);//发信号一对多

        以上就是常见的函数。

void *func(void *arg)
{
    while(0==flag)
    {
        pthread_mutex_lock(&mutex);
        pthread_cond_wait(&cond,&mutex);
        ......资源加工......
        pthread_mutex_unlock(&mutex);
    }
    pthread_exit(NULL);
}

int main()
{
    pthread_mutex_init(&mutex,NULL);
    pthread_cond_init(&cond,NULL);
    ret=pthread_create(&th,NULL,func,NULL);    
    while(1)
    {
        scanf("%s",buf);
        pthread_cond_signal(&cond);发信号让子线程干活
        ......主线程干活......
    }
    ret=pthread_join(th,NULL);//子线程回收
    pthread_mutex_destroy(&mutex);//销毁锁
    pthread_cond_destroy(&cond);//销毁条件变量
}

        条件变量同步必须在解锁与开锁之间进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值