IO进程线程
- 线程间通信与同步互斥1-flag
- result
- 线程间互同步互斥 --互斥锁
- result
线程间通信与同步互斥1-flag
#include
#include
#include
char str[]="123456";int flag=0;
void *callbackA(void *arg)
{
while(1)
{
if(flag==1)
{
printf("str=%sn",str);
flag=0;
}
}
pthread_exit(NULL);
}
void *callbackB(void *arg)
{
char temp=0;
while(1)
{
if(flag==0)
{
int i=0;
while(i<3)
{
temp=str[i];
str[i]=str[5-i];
str[5-i]=temp;
i++;
}
flag=1;
}
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
printf("程序开始运行n");
//创建子线程
pthread_t tid1;
pthread_t tid2;
if(pthread_create(&tid1, NULL,callbackA,NULL)!=0)
{
perror("pthreadA");
return -1;
}
if(pthread_create(&tid2, NULL,callbackB,NULL)!=0)
{
perror("pthreadB");
return -1;
}
printf("线程创建成功n");
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
result
线程间互同步互斥 --互斥锁
#include
#include
#include
#include
#include
#include
char str[]="123456";int flag=0;
pthread_mutex_t mutex;
int size=0;
void *callbackA(void *arg)
{
int *fd1=(int*)arg;
int *fd2=(int*)arg+1;
char c=0;
pthread_mutex_lock(&mutex);
lseek(*fd1,0,SEEK_SET);
lseek(*fd2,0,SEEK_SET);
int i=0;
for(i=0;i int res=read(*fd1,&c,1);
if(res<=0){break;}
write(*fd2,&c,1);
}
//sleep(1);
printf("上半部分打印成功n");
printf("上半部分:fd1=%d,fd2=%dn",*fd1,*fd2);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
void *callbackB(void *arg)
{
int *fd1=(int*)arg;
int *fd2=(int*)arg+1;
char c=0;
pthread_mutex_lock(&mutex);
int i=0;
lseek(*fd1,size/2,SEEK_SET);
lseek(*fd2,size/2,SEEK_SET);
printf("size=%d",size);
for(i=size/2;i
int res=read(*fd1,&c,1);
if(res<=0)break;
write(*fd2,&c,1);
}
printf("下半部分打印成功n");
printf("下半部分:fd1=%d,fd2=%dn",*fd1,*fd2);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
printf("程序开始运行n");
//创建锁
if(pthread_mutex_init(&mutex,NULL)!=0)
{
perror("mutex");
return -1;
}
int fd1=open("./origin.png",O_RDONLY);
if(fd1<0){perror("open_fd1");return -1;}
int fd2=open("./copy.png",O_WRONLY|O_CREAT|O_TRUNC,0777);
if(fd2<0){perror("open_fd2");return -1;}
size = lseek(fd1,0,SEEK_END);
int fd[2]={fd1,fd2};
printf("主程序:fd1=%d,fd2=%d",fd1,fd2);
//创建子线程
pthread_t tid1;//拷贝前半部分
pthread_t tid2;//拷贝后半部分
if(pthread_create(&tid1, NULL,callbackA,(void*)fd)!=0)
{
perror("pthreadA");
return -1;
}
if(pthread_create(&tid2, NULL,callbackB,(void*)fd)!=0)
{
perror("pthreadB");
return -1;
}
printf("线程创建成功n");
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
close(fd1);
close(fd2);
pthread_mutex_destroy(&mutex);
return 0;
}
result