0
点赞
收藏
分享

微信扫一扫

父进程有多个线程,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;
}

 

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

 

 

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

 

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



举报

相关推荐

0 条评论