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;
    }
}   

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

https://www.cnblogs.com/happy-king/p/7844524.html