直接看代碼吧,代碼里有注釋
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); //線程通過執行此函數,終止執行。返回是一個空指針類型
}
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);
}
新聞熱點
疑難解答
圖片精選