命名信号量在现实世界中有哪些用途?
What are some real world uses of the named semaphores?
在类 UNIX 系统中,我们既有未命名的信号量,也有命名的信号量。对于我所做的基本上所有事情,因为我必须将指针传递给要访问的实际数据,所以我总是设法将信号量也传递给任何必须访问资源本身的线程。简单技巧:创建一个包含对象和信号量的结构。
在哪些情况下最好使用命名信号量?
正如jspcl所说。命名信号量用于进程之间的同步。在两个进程之间不能共享相同的地址(因为在某些嵌入式 os 中有一些例外,例如完整性,qnx 等。)。因为每个进程都有不同的地址空间,地址页不同。
因此命名信号量用于访问进程之间的共享内存。
例如,
Linux 中的 shmget() posix 调用用于命名信号量。在此调用中,您必须使用 char* 的信号量名称以及进程内存的读写权限。它将 return 与共享内存关联的信号量的文件描述符。之后你必须调用 mmap 来获取共享内存地址。通过它你可以读取和写入共享内存。
现实世界的例子是使用多个处理器的航空。一个进程将与其他电子部件交互并将信息发送到其他处理器。因此在其他处理器中必须有可以从串口读取数据然后发送给其他进程的进程。所以这里使用名为信号量的多进程通信
在类 UNIX 系统中,我们既有未命名的信号量,也有命名的信号量。对于我所做的基本上所有事情,因为我必须将指针传递给要访问的实际数据,所以我总是设法将信号量也传递给任何必须访问资源本身的线程。简单技巧:创建一个包含对象和信号量的结构。
在哪些情况下最好使用命名信号量?
正如jspcl所说。命名信号量用于进程之间的同步。在两个进程之间不能共享相同的地址(因为在某些嵌入式 os 中有一些例外,例如完整性,qnx 等。)。因为每个进程都有不同的地址空间,地址页不同。
因此命名信号量用于访问进程之间的共享内存。
例如, Linux 中的 shmget() posix 调用用于命名信号量。在此调用中,您必须使用 char* 的信号量名称以及进程内存的读写权限。它将 return 与共享内存关联的信号量的文件描述符。之后你必须调用 mmap 来获取共享内存地址。通过它你可以读取和写入共享内存。
现实世界的例子是使用多个处理器的航空。一个进程将与其他电子部件交互并将信息发送到其他处理器。因此在其他处理器中必须有可以从串口读取数据然后发送给其他进程的进程。所以这里使用名为信号量的多进程通信