zoukankan      html  css  js  c++  java
  • linux条件锁和互斥锁

      等待线程

      1。使用pthread_cond_wait前要先加锁

      2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活

      3。pthread_cond_wait被激活后会再自动加锁

      激活线程:

      1。加锁(和等待线程用同一个锁)

      2。pthread_cond_signal发送信号

      3。解锁

      激活线程的上面三个操作在运行时间上都在等待线程的pthread_cond_wait函数内部。

      程序示例:

      #include <stdio.h>

      #include <pthread.h>

      #include <unistd.h>

      pthread_mutex_t count_lock;

      pthread_cond_t count_nonzero;

      unsigned count = 0;

      void * decrement_count(void *arg)

      {

      pthread_mutex_lock (&count_lock);

      printf("decrement_count get count_lock\n");

      while(count==0) {

      printf("decrement_count count == 0 \n");

      printf("decrement_count before cond_wait \n");

      pthread_cond_wait( &count_nonzero, &count_lock);

      printf("decrement_count after cond_wait \n");

      }

      count = count -1;

      pthread_mutex_unlock (&count_lock);

      }

      void * increment_count(void *arg){

      pthread_mutex_lock(&count_lock);

      printf("increment_count get count_lock\n");

      if(count==0) {

      printf("increment_count before cond_signal\n");

      pthread_cond_signal(&count_nonzero);

      printf("increment_count after cond_signal\n");

      }

      count=count+1;

      pthread_mutex_unlock(&count_lock);

      }

      int main(void)

      {

      pthread_t tid1,tid2;

      pthread_mutex_init(&count_lock,NULL);

      pthread_cond_init(&count_nonzero,NULL);

      pthread_create(&tid1,NULL,decrement_count,NULL);

      sleep(2);

      pthread_create(&tid2,NULL,increment_count,NULL);

      sleep(10);

      pthread_exit(0);

      }

  • 相关阅读:
    vue项目中引入tinymce4
    `elementui`表格实现无限滚动
    `index.html`与`App.vue`中有相同`id`的`div`,`main.js`绑定的是哪一个?
    IDEA下新建SpringMVC项目的配置文件
    IDEA中-------Tomcat启动提示404
    一、代理模式:静态代理与动态代理
    Java发送QQ邮件-附jar包下载链接
    Git使用教程(下)
    Git使用教程(中)
    python菜鸟教程学习13:文件操作
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2467561.html
Copyright © 2011-2022 走看看