栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

嵌入式学习--IO进程线程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式学习--IO进程线程

IO进程线程
  • 线程间通信与同步互斥1-flag
    • result![在这里插入图片描述](https://img-blog.csdnimg.cn/0fed436517364767be4f06b097345458.png)
  • 线程间互同步互斥 --互斥锁
  • 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034720.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号