#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <string.h>
char arr[56]=" ";
sem_t sem,sem1;
int i=0;
void *Fun(void *arg)
{
while(i<=56)
{
sem_wait(&sem1);
i++;
arr[i]='b';
sem_post(&sem);
}
return NULL;
}
void *Fun1(void *arg)
{
while(i<=56)
{
sem_wait(&sem);
i++;
arr[i]='a';
sem_post(&sem1);
}
return NULL;
}
int main(int argc, const char *argv[])
{
int ret=0;
pthread_t pid,pid1;
// memset(arr,0,56);
ret=sem_init(&sem,0,1);
if(ret!=0)
{
printf("sem_init is fail\n");
return -1;
}
ret=sem_init(&sem1,0,0);
if(ret!=0)
{
printf("sem_init is fail\n");
return -1;
}
ret=pthread_create(&pid,NULL,Fun,NULL);
if(ret!=0)
{
printf("Fun create is failed\n");
return -1;
}
ret=pthread_create(&pid1,NULL,Fun1,NULL);
if(ret!=0)
{
printf("Fun1 create is failed\n");
return -1;
}
pthread_join(pid,NULL);
pthread_join(pid1,NULL);
printf("%s\n",arr);
return 0;
}
stu@stu-VirtualBox:~/day5$ ./a.out
ababababababababababababababababababababababababababababab
stu@stu-VirtualBox:~/day5$
为什么arr[56]=“ ”;里面加了空格或者其他字符就能打印,而不加空格就无法打印出来。