以交错方式打印小字母和大写字母

时间:2015-04-15 09:07:16

标签: multithreading

我有两个字母数组。一个是小写字母,另一个是大写字母,如下所示。

char arr1[] = "abcdefghijklmnopqrstuvwxyz";
char arr2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

我想运行两个线程(POSIX)来获取输出,如下所示。

aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ.

1 个答案:

答案 0 :(得分:0)

void * print_message_function1(void * ptr);

void * print_message_function2(void * ptr);

sem_t s1,s2;

int main() {

 pthread_t thread1, thread2;
 const char *message1 = "abcdefghijklmnopqrstuvwxyz";
 const char *message2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 int  iret1, iret2;

 sem_init(&s1, 0, 0);
 sem_init(&s2, 0, 0);

 pthread_create( &thread1, NULL, print_message_function1, (void*) message1);


pthread_create( &thread2, NULL, print_message_function2, (void*) message2);


 pthread_join( thread1, NULL);
 pthread_join( thread2, NULL);
 sem_destroy(&s1);
 sem_destroy(&s2);

 return 0;

}

void * print_message_function1(void * ptr) {

 char *message;
 message = (char *) ptr;
 while(*message != '\0')
 {
 printf("%c ", *message++);
 sem_wait(&s2);
 sem_post(&s1);

 }

}

void * print_message_function2(void * ptr) {

 char *message;
 message = (char *) ptr;
 while(*message != '\0')
 {
 printf("%c ", *message++);
 sem_post(&s2);
 sem_wait(&s1);
 }

}

相关问题