笔试题之两个线程轮流打印字母和数字

一个线程打印数字,一个线程打印字母,交替进行。

打印的结果为:12A 34B 56C 78D 910E ...4950Y 5152Z。

代码如下:

C代码

#include
#include
#include
#include

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  even  = PTHREAD_COND_INITIALIZER;

int k=0;
void test1(){
    int i;
    for(i=0;i<26;i++)
    {
        pthread_mutex_lock(&mutex);
        if(k%3==0){
            k++;
            pthread_cond_wait(&even, &mutex);
        }
            
        printf("%c ",'A'+ i);
        pthread_mutex_unlock(&mutex);
    }

void test2(){
    int j;
    for(j=1;j<=52;j++)
    {
        pthread_mutex_lock(&mutex);
        if(k%3!=0){
            k++;
            pthread_cond_signal(&even);
        }
        printf("%d",j);
        pthread_mutex_unlock(&mutex);
    }
}

int main(){
    pthread_t id1,id2;
    int ret1,ret2;
    
    ret2 = pthread_create(&id2,NULL,(void *)test2,NULL);
    ret1 = pthread_create(&id1,NULL,(void *)test1,NULL);
    
    pthread_join(id2,NULL);
    pthread_join(id1,NULL);
    
    return 0;
}

你可能感兴趣的:(面试题)