进程同步、线程基础与杂项源码解析
进程同步程序
在之前的程序里,多线程间共享计数器很简单,只需将计数器存为全局变量。现在,我们要修改程序,实现不同进程间的同步。
为了让父进程和子进程共享计数器,我们把计数器存于共享内存中,该共享内存由 my-shm 函数分配,代码如下:
void *
my-shm(size_t nbytes)
{
void *shared;
#if defined(MAP_ANON)
shared = mmap(NULL, nbytes, PROT_READ | PROT_WRITE,
MAP_ANON | MAP_SHARED, -1, 0);
#elif defined(HAVE_DEV_ZERO)
int fd;
/* memory map /dev/zero */
if ((fd = open("/dev/zero", O_RDWR)) == -1)
return (MAP_FAILED);
shared = mmap(NULL, nbytes, PROT_READ | PROT_WRITE | MAP_SHARED, fd, 0);
close(fd);
#else
#error cannot determine what type of anonymous shared memory to use
#endif
return (shared); /* MAP_FAILED on error */
}
如果系统支持
超级会员免费看
订阅专栏 解锁全文
526

被折叠的 条评论
为什么被折叠?



