例子如下:
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
int main()
{
pthread_mutex_t *mutex;
pthread_mutexattr_t attr;
int fd;
fd = open("mutex", O_RDWR|O_CREAT);
mutex = mmap(NULL, sizeof(pthread_mutex_t), PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(
&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_init(mutex, &attr);
pthread_mutexattr_destroy( &attr);
pthread_mutex_destroy(mutex);
munmap(mutex, sizeof(pthread_mutex_t));
close(fd);
return 0;
}
程序在linux下运行的时候,pthread_mutex _init()会触发一个SIGBUS信号。《Unix Network
Programming》给出的例子是用/dev/zero, 大家知道原因么?linux下多进程共享内存同步有什么更好的方 法么?
--~--~---------~--~----~------ ------~-------~--~----~
高性能网络编程
http://groups.google.com/group /dev4server
-~----------~----~----~----~-- ----~----~------~--~---
> a[sizeof(pthread_mutex_t)] ;没什么区别。
参加《Unix网络编程》卷一
> 进程间互斥有很多方法
> 如果仅仅是传递数据,使用FIFO就比较合适。FIFO提供了简 单的进程间互斥的方式。
我需要实现类似apache scoreboard的东西,mmap感觉更适合
不知道准备用什么方式来实现 worker mpm ?
之前实现过一个类似的进程池的库,也包含了这样一个 worker mpm 。
http://code.google.com/p /spprocpool/
包含了 3 个不同的模型
1. worker mpm
2. 多进程使用 leader/follower 模型进行 accept
3. 父进程 accept,通过 send_fd / recv_fd 传递句柄模型
Best regards,
stephen.nil
2008-05-07
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
int main()
{
pthread_mutex_t *mutex;
pthread_mutexattr_t attr;
int fd;
fd = open("mutex", O_RDWR|O_CREAT);
mutex = mmap(NULL, sizeof(pthread_mutex_t), PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(
pthread_mutex_init(mutex, &attr);
pthread_mutexattr_destroy(
pthread_mutex_destroy(mutex);
munmap(mutex, sizeof(pthread_mutex_t));
close(fd);
return 0;
}
程序在linux下运行的时候,pthread_mutex
Programming》给出的例子是用/dev/zero, 大家知道原因么?linux下多进程共享内存同步有什么更好的方
--~--~---------~--~----~------
高性能网络编程
http://groups.google.com/group
-~----------~----~----~----~--
![]() |
![]() |
![]() |

|
show details
12:40 PM (10 hours ago)
|
|
http://www.linuxsir.org/bbs /thread55666.html
4.1.2 进程共享的互斥、条件和信号量
为什么Linux线程没有实现进程共享的互斥、条件和信号量?
这是POSIX标准的一个可选部分。可移植的程序在使用此机制之前
4.1.2 进程共享的互斥、条件和信号量
为什么Linux线程没有实现进程共享的互斥、条件和信号量?
这是POSIX标准的一个可选部分。可移植的程序在使用此机制之前
必需检查宏
_POSIX_THREAD_PROCESS_SHARED是否存 在。
该扩展标准的目的是使不同的进程(也就是说在不同的地址空间中 )可以通过
在共享内存(无论是SRV4的共享内存段还是用mmfile( )产生的内存文件)中的
互斥、条件和信号量来实现进程间的同步。
在Linux线程中没有实现此功能的原因是在Linux中互斥 、条件和信号并不是独
立的:它们的等待队列包含着指向线程描述符连接表的指针 ,而这些指针只在
特定的地址空间才有效。
Matt Messier和Sean Walton花了相当长的时间来设计一个在进程间共享等待队
列的适合的机制。我们得到了数个可以将下列三项特点中的两项结合起 来的解决
方案,但没有一个可以将三者结合起来:
* 允许不同UID的进程之间的共享;
* 支持取消操作;
* 支持pthread_cond_timedwait
由此我们知道进程间共享互斥、条件和信号量需要内核的某些支持 (而目前并不
支持)。这也许是Linus Torvalds的直觉"在内核中我们只需要clone() "的失败
之处之一。
在内核提供对它们的支持之前,你最好使用传统的进程间通讯方式来同 步进程:
SYSTEM V信号量和消息队列,或管道或SOCKETS。
_POSIX_THREAD_PROCESS_SHARED是否存
该扩展标准的目的是使不同的进程(也就是说在不同的地址空间中
在共享内存(无论是SRV4的共享内存段还是用mmfile(
互斥、条件和信号量来实现进程间的同步。
在Linux线程中没有实现此功能的原因是在Linux中互斥
立的:它们的等待队列包含着指向线程描述符连接表的指针
特定的地址空间才有效。
Matt Messier和Sean Walton花了相当长的时间来设计一个在进程间共享等待队
列的适合的机制。我们得到了数个可以将下列三项特点中的两项结合起
方案,但没有一个可以将三者结合起来:
* 允许不同UID的进程之间的共享;
* 支持取消操作;
* 支持pthread_cond_timedwait
由此我们知道进程间共享互斥、条件和信号量需要内核的某些支持
支持)。这也许是Linus Torvalds的直觉"在内核中我们只需要clone()
之处之一。
在内核提供对它们的支持之前,你最好使用传统的进程间通讯方式来同
SYSTEM V信号量和消息队列,或管道或SOCKETS。
> a[sizeof(pthread_mutex_t)]
> 进程间互斥有很多方法
> 如果仅仅是传递数据,使用FIFO就比较合适。FIFO提供了简
我需要实现类似apache scoreboard的东西,mmap感觉更适合
不知道准备用什么方式来实现 worker mpm ?
之前实现过一个类似的进程池的库,也包含了这样一个 worker mpm 。
http://code.google.com/p
包含了 3 个不同的模型
1. worker mpm
2. 多进程使用 leader/follower 模型进行 accept
3. 父进程 accept,通过 send_fd / recv_fd 传递句柄模型
Best regards,
stephen.nil
2008-05-07