linux c多線程編程執行個體代碼_C 語言

來源:互聯網
上載者:User

直接看代碼吧,代碼裡有注釋

複製代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
#define MAX 3

int number =0;
pthread_t id[2];
pthread_mutex_t mut; //初始化靜態互斥鎖

void thread1(void)
{
    int i;
    printf("Hello,I am pthread1!\n");
    for (i=0; i<MAX; i++)
    {
        pthread_mutex_lock(&mut);  //此處上鎖,保證number的唯一性
            number ++;  
            printf("Thread1:number = %d\n",number);
        pthread_mutex_unlock(&mut);
        sleep(1);  //linux c下 sleep(minute),裡面變數單位是分鐘
    }
    pthread_exit(NULL); //線程通過執行此函數,終止執行。返回是一個null 指標類型
}

void thread2(void)
{
    int j;
    printf("Hello,I'm pthread2\n");
    for(j=0; j<MAX; j++)
    {
        pthread_mutex_lock(&mut);
             number ++;
             printf("Thread2:number = %d\n",number);
        pthread_mutex_unlock(&mut);
        sleep(1);
    }
    pthread_exit(NULL);
}

void thread_create(void)
{
    int temp;
    memset(&id, 0, sizeof(id));
if(temp = pthread_create(&id[0], NULL, (void *)thread1, NULL)!= 0)
                          //參數:線程標識符指標 線程屬性  線程運行函數起始地址  運行函數屬性
                          //建立成功返回 0
        printf("Thread 1 fail to create!\n");
    else
        printf("Thread 1 created\n");
    if(temp = pthread_create(&id[1], NULL, (void *)thread2, NULL)!= 0)
        printf("Thread 2 fail to create!\n");
    else
        printf("Thread 2 created!\n");
 }  
void thread_wait()
{
    if(id[0] != 0)
    {
        pthread_join(id[0], NULL); //等待線程結束,使用此函數對建立的線程資源回收
        printf("Thread1 completed!\n");
    }
    if(id[1] != 0)
    {
        pthread_join(id[1], NULL);
        printf("Thread2 completed!\n");
    }
}
int main(void)
{
int i,ret1,ret2;
pthread_mutex_init(&mut, NULL); //動態互斥鎖
    printf("Main fuction,creating thread...\n");
    thread_create();
    printf("Main fuction, waiting for the pthread end!\n");
    thread_wait();
    return (0);
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.