父进程与子线程互斥问题
时间:2010-07-22
来源:互联网
父进程生成100个工作线程
在工作线程中也要对A进行操作 这时用什么样的锁机制比较好 我了解的pthread_mutex是满足不了的.
这个锁机制要起到线程和进程 线程和线程 之间都要互斥 信号量好像也解决不了
有谁有好的办法么 最好有类似spinlock这种机制
作者: 丁字裤男爵 发布时间: 2010-07-22
pthread_mutex 为什么满足不了?看了你的描述全部只有一个进程,是多线程模式。
作者: 梅川内依酷 发布时间: 2010-07-22
pthread_mutex 为什么满足不了?看了你的描述全部只有一个进程,是多线程模式。 ...
梅川内依酷 发表于 2010-07-22 11:02
pthread_mutex对进程有效么?
作者: 丁字裤男爵 发布时间: 2010-07-22
如果你没有fork()的话,我觉得父进程也只是一个线程。
作者: 梅川内依酷 发布时间: 2010-07-22
如果你没有fork()的话,我觉得父进程也只是一个线程。
梅川内依酷 发表于 2010-07-22 11:04
这个应该是对于整个系统来说的. 但是父进程和线程之间如果使用mutex好像只能互斥线程 进程无法互斥
我查了一下 有个这个东西 PTHREAD_PROCESS_SHARED 用于同步该进程和其他进程中的线程
不确定这个东西是否能够符合我的需求 有没有人用过
作者: 丁字裤男爵 发布时间: 2010-07-22
哦 受教
作者: 梅川内依酷 发布时间: 2010-07-22
作者: 丁字裤男爵 发布时间: 2010-07-22
早期的Linux没有实现信号量的多进程互斥,现在的可以了。
- [dave@dave ~]$ man sem_init
-
- SEM_INIT(3) Linux Programmer’s Manual SEM_INIT(3)
-
- NAME
- sem_init - initialize an unnamed semaphore
-
- SYNOPSIS
- #include <semaphore.h>
-
- int sem_init(sem_t *sem, int pshared, unsigned int value);
-
- Link with -lrt or -pthread.
-
- DESCRIPTION
- sem_init() initializes the unnamed semaphore at the address pointed to by sem. The value argument specifies the initial
- value for the semaphore.
-
- The pshared argument indicates whether this semaphore is to be shared between the threads of a process, or between processes.
-
- If pshared has the value 0, then the semaphore is shared between the threads of a process, and should be located at some address that is visible to all threads (e.g., a global variable, or a variable allocated dynamically on the heap).
-
- If pshared is non-zero, then the semaphore is shared between processes, and should be located in a region of shared memory (see shm_open(3), mmap(2), and shmget(2)). (Since a child created by fork(2) inherits its parent’s memory mappings, it can also access the semaphore.) Any process that can access the shared memory region can operate on the semaphore using sem_post(3), sem_wait(3), etc.
作者: davelv 发布时间: 2010-07-22
如果你没有fork()的话,我觉得父进程也只是一个线程。
梅川内依酷 发表于 2010-07-22 11:04
是的,楼主根本不存在多进程问题
作者: c/unix 发布时间: 2010-07-22
哦 受教
梅川内依酷 发表于 2010-07-22 11:11
那人的意思是在同一进程上下文中 可以是使用mutex对子线程和父进程互斥
多进程时候 需要使用我刚才说到的那个东西
作者: 丁字裤男爵 发布时间: 2010-07-22
早期的Linux没有实现信号量的多进程互斥,现在的可以了。
davelv 发表于 2010-07-22 11:12
这种情况应该不能使用信号量 我觉得信号量会造成主进程休眠
作者: 丁字裤男爵 发布时间: 2010-07-22
像你的全局变量A,多进程的话,也是开辟多个进程空间变量A也是每个进程一份,不会相互干扰。
作者: davelv 发布时间: 2010-07-22
像你的全局变量A,多进程的话,也是开辟多个进程空间变量 ...
davelv 发表于 2010-07-22 11:14
我的情况也需要互斥把 单进程内包含多线程
作者: 丁字裤男爵 发布时间: 2010-07-22
丁字裤男爵 发表于 2010-07-22 11:13
如果不休眠,那么楼主认为多进程互斥的规则是怎么样的?
作者: davelv 发布时间: 2010-07-22
丁字裤男爵 发表于 2010-07-22 11:18
那就像前面仁兄说的,和进程无关,只考虑线程就可以了。
互斥量,条件变量和信号量都可以实现线程级别的互斥。
作者: davelv 发布时间: 2010-07-22
互斥量,条件变量和信号量都可以实现线程级别的 ...
davelv 发表于 2010-07-22 11:22
就是说我这种情况实际上用于生成子线程的进程 其实也可以作为一个线程来考虑
作者: 丁字裤男爵 发布时间: 2010-07-22
丁字裤男爵 发表于 2010-07-22 11:24
你这句话当真让我摸不到头脑了,既然是要生成子线程,为什么要当真一个线程来考虑,不是有生成了多个线程么?
还是写错了,当成一个进程来考虑?
作者: davelv 发布时间: 2010-07-22
davelv 发表于 2010-07-22 11:36
我的意思是 在单进程内 mutex可以用于主进程和子线程之间的互斥
但多进程之间需要使用PTHREAD_PROCESS_SHARED初始化mutex
作者: 丁字裤男爵 发布时间: 2010-07-22
但多进程之间需要使用PTHREAD_ ...
丁字裤男爵 发表于 2010-07-22 11:43
首先说明的是既然是单进程了,何来父进程和子线程这样奇怪的分类。
科普一下,咱们普通的程序就例如hello world这种,是单进程+单线程程序,如果没有子进程那么就没有父进程这样的称谓。
一个进程fork出来的时候肯定会默认带一个线程。
在pthread线程体系中,线程也没有严格的父子之分,一个进程的多个线程都是并列存在,权限相同的。
一点,mutex互斥量是不能跨进程,也不可以由一个线程加锁,另外一个线程释放。
作者: davelv 发布时间: 2010-07-22
科普一下,咱们普通的程序就例如hell ...
davelv 发表于 2010-07-22 11:49
你还是没看明白我的问题.
有进程A 生成线程B C D.
我的意思是线程B C D可以使用mutex和进程A互斥
这和叫什么没关系 我所说的父进程并不是说多进程环境 只是说这个进程生成了3个线程 对于三个线程而言 进程A可以算作B C D的父进程
如果mutex可以由其他线程释放 那mutex也没有必要存在了
作者: 丁字裤男爵 发布时间: 2010-07-22
有进程A 生成线程B C D.
我的意思是线程B C D可以使用mutex和进程 ...
丁字裤男爵 发表于 2010-07-22 11:59
恕我愚钝,我是在没看懂您到底说的是进程还是线程。虽然人家说Linux下线程是进程的clone,但是到了这种情况,是在是沟通不能...
作者: davelv 发布时间: 2010-07-22
线程间是没有父子之分的。
作者: JohnBull 发布时间: 2010-07-25
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28