父进程有多个线程,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 @   LiuYanYGZ  阅读(145)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示