- 论坛徽章:
- 0
|
环境:
$ getconf GNU_LIBPTHREAD_VERSION
NPTL 2.3.4
$ uname -r
2.6.9-5.ELsmp
问题:
我设置了PTHREAD_PROCESS_PRIVATE属性,但是依然可以在父进程和子进程之间同步。
另外,不设置PTHREAD_PROCESS_SHARED属性,也可以在父进程和子进程之间同步。
是不是我对mutex属性的理解有问题?还是NPTL就是这样支持的呢?
测试程序:
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #include <sys/wait.h>
- #include <unistd.h>
- #include <pthread.h>
- #include <stdio.h>
- int main(int argc, char** argv)
- {
- int ipc_key = 0x11223344;
- int shmid = shmget(ipc_key, sizeof(pthread_mutex_t), IPC_CREAT | 0666);
- if(shmid < 0)
- {
- printf("shmget error\n");
- return -1;
- }
- pthread_mutex_t* mutex = (pthread_mutex_t*)shmat(shmid, NULL, 0);
- if(mutex == (pthread_mutex_t*)-1)
- {
- printf("shmat error\n");
- return -1;
- }
- pthread_mutexattr_t attr;
- pthread_mutexattr_init(&attr);
- pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_PRIVATE);
- pthread_mutex_init(mutex, &attr);
- pid_t pid = fork();
- if(pid == 0)
- {
- pthread_mutex_lock(mutex);
- printf("PID: %d\n", pid);
- sleep(5);
- pthread_mutex_unlock(mutex);
- return 0;
- }
- pthread_mutex_lock(mutex);
- printf("PID: %d\n", pid);
- sleep(5);
- pthread_mutex_unlock(mutex);
- waitpid(pid, NULL, 0);
- shmctl(shmid, IPC_RMID, 0);
- return 0;
- }
复制代码
[ 本帖最后由 精简指令 于 2006-8-9 22:51 编辑 ] |
|