Livedlier 2020-04-29 10:52 采纳率: 0%
浏览 249

c语言:操作系统多线程问题-将串行执行改成并发执行

1.将一个串行执行的多线程改成并发执行,不知道自己这样改对不对,如有错误请多多指教,谢谢各位大佬。

2.附上两个代码(串行执行和并发执行):

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int counter = 0;
void *p1(void *param);
void *p2(void *param);
int main()
{
    pthread_t tid1, tid2;

    pthread_attr_t attr1, attr2;

    pthread_attr_init(&attr1);
    pthread_attr_init(&attr2);

    pthread_create(&tid1,&attr1,p1,NULL);
    pthread_join(tid1,NULL);
    pthread_create(&tid2,&attr2,p2,NULL);
    pthread_join(tid2,NULL);
    printf("counter = %d\n",counter);
    return 0;
}

void *p1(void *param)
{
    int i;
    for(i=0;i<10;i++)
    {
        int icopy = counter;
        sleep(1);
        icopy++;
        sleep(1);
        counter = icopy;
    }
}

void *p2(void *param)
{
    int i;
    for(i=0;i<10;i++)
    {
        int icopy = counter;
        sleep(1);
        icopy++;
        sleep(1);
        counter = icopy;
    }
}

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int counter = 0;
int i;
void *p1(void *param);
void *p2(void *param);

int main(int argc,char **argv)
{
    int rank;
    pthread_t tid1, tid2;
    pthread_attr_t attr1, attr2;

    pthread_attr_init(&attr1);
    pthread_attr_init(&attr2);

    if(tid1 == 0)
    {
        pthread_create(&tid1,&attr1,p1,NULL);
        pthread_join(tid1,NULL);
    }
    else if(tid1 != -1)
    {
        pthread_create(&tid2,&attr2,p2,NULL);
        pthread_join(tid2,NULL);
        printf("counter = %d\n",counter);
        if(tid2 == 0)
        {
            pthread_create(&tid2,&attr2,p2,NULL);
            pthread_join(tid2,NULL);
            printf("counter = %d\n",counter);
        }
    }

    return 0;
}

void *p1(void *param)
{
    int i;
    for(i=0;i<10;i++)
    {
        int icopy = counter;
        sleep(1);
        icopy++;
        sleep(1);
        counter = icopy;
    }
}

void *p2(void *param)
{
    int i;
    for(i=0;i<10;i++)
    {
        int icopy = counter;
        sleep(1);
        icopy++;
        sleep(1);
        counter = icopy;
    }
}   
  • 写回答

2条回答 默认 最新

  • Happy_Enger 2020-05-01 11:12
    关注

    我想问一下,LINUX下线程不本来就是并发的吗?你的意思是不是同步?

    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码