<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## 條件變量 - 條件變量是一種相對復雜的線程同步方法 - 條件變量允許線程睡眠,直到滿足某種條件 - 當滿足條件時,可以向該線程信號,通知喚醒 ### 問題 - 緩沖區小于等于0時,不允許消費者消費,消費者必須等待 - 緩沖區滿時,不允許生產者往緩沖區生產,生產者必須等待 - 當生產者生產個產品時,喚醒可能等待的消費者 - 當消費者消費一個產品時,喚醒可鏘等待的生產者 ### api ``` pthread_cond_t pthread_cond_wait(等待條件滿足) pthread_cond_notify(等待被喚醒) ``` ## 示例 <details> <summary>main.cpp</summary> ``` #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <vector> int MAX_BUF = 100; int num =0; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void *producer(void*){ while(true){ pthread_mutex_lock(&mutex); while(num>=MAX_BUF){ // 等待 pthread_cond_wait(&cond,&mutex); printf("緩沖區滿了,等待消費者消費\n"); } num++; printf("生產一個產品,當前產品數量為: %d\n",num ); sleep(1); pthread_cond_signal(&cond); printf("通知消費者...\n"); pthread_mutex_unlock(&mutex); sleep(1); } } void *consumer(void*){ while(true){ pthread_mutex_lock(&mutex); while(num<=0){ // 等待 pthread_cond_wait(&cond,&mutex); printf("緩沖區空了,等待生成者生產..\n"); } num--; printf("消費一個產品,當前產品數量為: %d\n",num ); sleep(1); pthread_cond_signal(&cond); printf("通知生產者...\n"); pthread_mutex_unlock(&mutex); } } int main(){ printf("stat in main function."); pthread_t thread1,thread2; pthread_create(&thread1,NULL,&producer,NULL); pthread_create(&thread2,NULL,&consumer,NULL); pthread_join(thread1,NULL); pthread_join(thread2,NULL); printf("print in main function:num=%d",num); return 0; } ``` 編譯并運行 ``` > g++ main.cpp && time ./a.out stat in main function.生產一個產品,當前產品數量為: 1 通知消費者... 消費一個產品,當前產品數量為: 0 通知生產者... 生產一個產品,當前產品數量為: 1 通知消費者... 緩沖區空了,等待生成者生產.. 消費一個產品,當前產品數量為: 0 通知生產者... ... ``` </details> <br />
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看