1.创建两个线程A、B,以及一个全局变量char str[] = "123456",在不考虑线程退出的情况下,要求如下:(必须上交)
1. A线程 循环 打印str字符串。
2. B线程 循环 倒置str字符串,不使用辅助数组。注意是循环倒置,要把字符串倒过来,倒回去。
3. 要求A线程打印出来的结果是有序的,例如:"123456" 或者 "654321",不允许出现"623451",,,等无序情况
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<pthread.h>
#include<string.h>
#include<semaphore.h>
char str[]="123456";
sem_t sem;
void* fun1(void *arg)
{
while(1)
{
sem_wait(&sem);
printf("%s\n",str);
sem_post(&sem);
}
return NULL;
}
void *fun2(void* arg)
{
while(1)
{
sem_wait(&sem);
for(int i=0;i<strlen(str)/2;i++)
{
char temp=str[i];
str[i]=str[strlen(str)-i-1];
str[strlen(str)-1-i]=temp;
}
sem_post(&sem);
}
return NULL;
}
int main(int argc, const char *argv[])
{
sem_init(&sem,0,1);
pthread_t a,b;
if(pthread_create(&a,NULL,fun1,NULL)!=0)
{
perror("pthread_create_a ");
return -1;
}
if(pthread_create(&b,NULL,fun2,NULL)!=0)
{
perror("pthread_create_b");
return -1;
}
pthread_join(a,NULL);
pthread_join(b,NULL);
sem_destroy(&sem);
return 0;
}
2两个线程 A、B,要求A线程读取文件中的数据,B线程将读取到的数据打印到终端上。类似cat一个文件
#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<pthread.h>
#include<semaphore.h>
#include<strings.h>
sem_t sem;
char str[20]="";
ssize_t res=-1;
void *A(void *arg)
{
while(res!=0)
{
sem_wait(&sem);
if(str[0]=='\0')
{
res=read(*(int*)arg,str,sizeof(str)-1);
}
sem_post(&sem);
}
pthread_exit(NULL);
}
void *B(void *arg)
{
while(res!=0)
{
sem_wait(&sem);
if(str[0]!='\0')
{
write(1,str,res);
}
bzero(str,sizeof(str));
sem_post(&sem);
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
int file_r=open("./printf.c",O_RDONLY);
if(file_r<0)
{
printf("open");
return -1;
}
if(sem_init(&sem,0,1)<0)
{
perror("sem_init");
return -1;
}
pthread_t a,b;
if(pthread_create(&a,NULL,A,&file_r)!=0)
{
perror("pthread_create1");
return -1;
}
if(pthread_create(&b,NULL,B,NULL)!=0)
{
perror("pthread_create2");
return -1;
}
pthread_join(a,NULL);
pthread_join(b,NULL);
close(file_r);
sem_destroy(&sem);
return 0;
}