linux线程创建、挂起、恢复、退出

来源:互联网 发布:中国足球巅峰时期知乎 编辑:程序博客网 时间:2024/06/05 05:44
/* * Copyright (c)2014 * All rights reserved * http://blog.csdn.net/ezhou_liukai */#include <stdio.h>#include <pthread.h>#include <unistd.h>pthread_mutex_t g_mutex;int g_nflag1, g_nflag2;static pthread_cond_t g_cond1 = PTHREAD_COND_INITIALIZER;static pthread_cond_t g_cond2 = PTHREAD_COND_INITIALIZER;void suspend(int n){    pthread_mutex_lock(&g_mutex);    switch (n)    {    case 1:          g_nflag1--;          break;    case 2:          g_nflag2--;          break;    default:          break;    }    pthread_mutex_unlock(&g_mutex);}void resume(int n){    pthread_mutex_lock(&g_mutex);    switch (n)    {        case 1:            g_nflag1++;            pthread_cond_signal(&g_cond1);            break;        case 2:            g_nflag2++;            pthread_cond_signal(&g_cond2);            break;        default:            break;    }       pthread_mutex_unlock(&g_mutex);}void *thr_fn1(void *arg){      for (int i = 0; i< 10; i++)   {       sleep(1);       pthread_mutex_lock(&g_mutex);       while (g_nflag1 <= 0)       {           pthread_cond_wait(&g_cond1, &g_mutex);       }       pthread_mutex_unlock(&g_mutex);       printf("Thread_ID: %u , i = %d\n", (unsigned int)pthread_self(), i);   }}void *thr_fn2(void *arg){    for (int i = 0; i < 10; i++)    {        sleep(1);        pthread_mutex_lock(&g_mutex);        while (g_nflag2 <= 0)        {            pthread_cond_wait(&g_cond2, &g_mutex);        }        pthread_mutex_unlock(&g_mutex);        printf("Thread_ID: %u, i = %d\n", (unsigned int)pthread_self(), i);    }}int main(void){    pthread_mutex_init(&g_mutex, NULL);    g_nflag1 = 1;    g_nflag2 = 1;    pthread_t tid1,tid2;    pthread_setconcurrency(3);    pthread_create(&tid1, NULL, &thr_fn1, NULL);    pthread_create(&tid2, NULL, &thr_fn2, NULL);    sleep(2.1);    suspend(2);    sleep(5.1);    resume(2);    suspend(1);    pthread_cancel(tid1);        pthread_join(tid1, NULL);    pthread_join(tid2, NULL);    return 1;}

0 0
原创粉丝点击