父进程有多个线程,fork()只会复制一个线程

 

fork()前的父进程有多个线程,子进程只复制fork所在线程为主进程,其他线程不复制

#include <pthread.h>
#include <sys/prctl.h>

pthread_mutex_t my_lock = PTHREAD_MUTEX_INITIALIZER;

static void *my_thread1(void *args)
{
    prctl(PR_SET_NAME, "thread_1");
    sleep(3*60);

    return NULL;
}

static void *my_thread2(void *args)
{
    prctl(PR_SET_NAME, "thread_2");
    sleep(3*60);

    return NULL;
}

int main(int argc, char * argv[])
{

    int count = 0;
    int ret = 0;
    int rc= 0;

    pthread_t thread_fd_1;
    pthread_t thread_fd_2;

    prctl(PR_SET_NAME, "thread_main");

    rc |= pthread_create(&thread_fd_1, NULL, my_thread1, NULL);
    rc |= pthread_create(&thread_fd_2, NULL, my_thread2, NULL);


    pthread_mutex_lock(&my_lock);
    count = 0;

    ret = fork();
    if (0 == ret) {
        
        printf("child will lock\r\n");
        pthread_mutex_lock(&my_lock);
        printf("child lock OK\r\n");

        count = 1;

        printf("child will unlock\r\n");
        pthread_mutex_unlock(&my_lock);
        printf("child unlock OK\r\n");
sleep(3*60);

    } else {
        printf("father will sleep(3*60)\r\n");
sleep(3*60);
    }

    return 0;
}

 

 

 

#include <pthread.h>
#include <sys/prctl.h>

pthread_mutex_t my_lock = PTHREAD_MUTEX_INITIALIZER;
static int count = 0;

static void *my_thread1(void *args)
{
    prctl(PR_SET_NAME, "thread_1");
    sleep(3*60);

    return NULL;
}

static void *my_thread2(void *args)
{
    int ret = 0;

    prctl(PR_SET_NAME, "thread_2");
    
    ret = fork();
    if (0 == ret) {
        
        printf("child will lock\r\n");
        pthread_mutex_lock(&my_lock);
        printf("child lock OK\r\n");

        count = 1;

        printf("child will unlock\r\n");
        pthread_mutex_unlock(&my_lock);
        printf("child unlock OK\r\n");
sleep(3*60);

    } else {
        printf("father will sleep(3*60)\r\n");
sleep(3*60);
    }
    return NULL;
}

int main(int argc, char * argv[])
{

    int ret = 0;
    int rc= 0;

    pthread_t thread_fd_1;
    pthread_t thread_fd_2;

    prctl(PR_SET_NAME, "thread_main");

    rc |= pthread_create(&thread_fd_1, NULL, my_thread1, NULL);
    rc |= pthread_create(&thread_fd_2, NULL, my_thread2, NULL);


    pthread_mutex_lock(&my_lock);
    count = 0;

sleep(3*60);

    return 0;
}

 

posted @ 2022-09-22 15:58  LiuYanYGZ  阅读(25)  评论(0编辑  收藏  举报