<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # x相關api **pthread\_t** pthread\_t在頭文件/usr/include/bits/pthreadtypes.h中定義: typedef unsigned long int pthread\_t; 它是一個線程的標識符。 **pthread\_create** 函數pthread\_create用來創建一個線程,它的原型為: ~~~ int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); ~~~ 第一個參數為指向線程標識符的指針, 第二個參數用來設置線程屬性,用來指定線程優先級等屬性, 第三個參數是線程運行函數的起始地址,函數指針 最后一個參數是運行函數的參數。這里,我們的函數thread不需要參數,所以最后一個參數設為空指針 **pthread_join pthread_exit** 函數pthread_join用來等待一個線程的結束。函數原型為: ~~~ extern int pthread_join __P ((pthread_t __th, void **__thread_return)); ~~~ 第一個參數為被等待的線程標識符, 第二個參數為一個用戶定義的指針,它可以用來存儲被等待線程的返回值。 這個函數是一個線程阻塞的函數,調用它的函數將一直等待到被等待的線程結束為止,當函數返回時,被等待線程的資源被收回。 一個線程的結束有兩種途徑, 一種是象我們上面的例子一樣,函數結束了,調用它的線程也就結束了; 另一種方式是通過函數pthread_exit來實現。它的函數原型為: ~~~ extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__)); ~~~   唯一的參數是函數的返回代碼,只要`pthread_join`中的第二個參數`thread_return`不是NULL,這個值將被傳遞給 `thread_return`.最后要說明的是,一個線程不能被多個線程等待,否則第一個接收到信號的線程成功返回,其余調用`pthread_join`的線程則返回錯誤代碼ESRCH # 代碼 ~~~ void * print_a(void *); void * print_b(void *); //線程A方法 void * print_a(void * a) { for (int i = 0; i < 10; ++i) { sleep(1); puts("aa"); } return NULL; } //線程B方法 void * print_b(void * b) { for (int i = 0; i < 20; ++i) { sleep(1); puts("bb"); } return NULL; } int main() { pthread_t t0; pthread_t t1; //創建線程A if (pthread_create(&t0, NULL, print_a, NULL) == -1) { puts("fail to create pthread t0"); exit(1); } if (pthread_create(&t1, NULL, print_b, NULL) == -1) { puts("fail to create pthread t1"); exit(1); } //等待線程結束 void * result; if (pthread_join(t0, &result) == -1) { puts("fail to recollect t0"); exit(1); } else { puts("t0 success"); } if (pthread_join(t1, &result) == -1) { puts("fail to recollect t1"); exit(1); }else { puts("t1 success"); } getchar(); return 0; } ~~~
                  <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>

                              哎呀哎呀视频在线观看