michile

导航

上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页

2013年2月6日

分配和释放信号量

摘要: 与用于分配、释放共享内存的shmget和shmctl类似,系统调用semget和semctl负责分配、释放信号量。调用semget函数并传递如下参数:一个用于标识信号量组的键值,该组中包含的信号量数量和与shmget所需的相同的权限位标识。该函数返回的是信号量组的标识符。你可以通过指定正确的键值来获取一个已经存在的信号量的标识符;这种情况下,传递的信号量组的容量可以为0。信号量会一直保存在系统中,甚至所有使用它们的进程都退出后也不会自动被销毁。最后一个使用信号量的进程必须明确地删除所使用的信号量组,来确保系统中不会有太多闲置的信号量组,从而导致无法创建新的信号量组。可以通过调用semctl来删 阅读全文

posted @ 2013-02-06 22:47 michile 阅读(3289) 评论(0) 推荐(0) 编辑

信号量

摘要: 信号量是一个可用于同步多线程环境的计数器。摘 高级linux程序设计 完美废人译 阅读全文

posted @ 2013-02-06 22:34 michile 阅读(178) 评论(0) 推荐(0) 编辑

代码列表5.1 (shm.c) 尝试共享内存

摘要: #include <stdoi.h> #include <sys/shm.h> #include <sys/stat.h> int main () { int segment_id; char* shared_memory; struct shmid_ds shmbuffer; int segment_size; const int shared_segment_size = 0x6400; /* 分配一个共享内存块*/ segment_id = shmget (IPC_PRIVATE, shared_segment_size, IPC_CREAT | IP 阅读全文

posted @ 2013-02-06 22:25 michile 阅读(165) 评论(0) 推荐(0) 编辑

控制和释放共享内存块

摘要: 调用shmctl("SHared Memory ConTroL",控制共享内存)函数会返回一个共享内存块的相关信息。同时shmctl允许程序修改这些信息。该函数的第一个参数是一个共享内存块标识。要获取一个共享内存块的相关信息,则为该函数传递 IPC_STAT 作为第二个参数,同时传递一个指向一个struct shmid_ds对象的指针作为第三个参数。要删除一个共享内存块,则应将IPC_RMID作为第二个参数,而将NULLL作为第三个参数。当最后一个绑定该共享内存块的进程与其脱离时,该共享内存块将被删除。你应当在结束使用每个共享内存块的时候都使用shmctl进行释放,以防止超 阅读全文

posted @ 2013-02-06 22:10 michile 阅读(483) 评论(0) 推荐(0) 编辑

绑定和脱离

摘要: 要让一个进程获取对一块共享内存的访问,这个进程必须先调用shmat(SHared Memory Attach,绑定到共享内存)。将shmget返回的共享内存标识符SHMID传递给这个函数作为第一个参数。该函数的第二个参数是一个指针,指向你希望用于映射该共享内存块的进程内存地址;如果你指定NULL则Linux会自动选择一个合适的地址用于映射。第三个参数是一个标志位,包含了以下选项:· SHM_RND表示第二个参数指定的地址应被向下靠拢到内存页面大小的整数倍。如果你不指定这个标志,你将不得不在调用shmat 的时候手工将共享内存块的大小按页面大小对齐。· SHM_RDONLY表 阅读全文

posted @ 2013-02-06 22:08 michile 阅读(111) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页