当前位置: 技术问答>linux和unix
linux有名信号灯的开关问题
来源: 互联网 发布时间:2016-08-12
本文导语: 1.用sem1=sem_open("sem1",O_CREAT,0666,1);打开了一个信号灯,但是不关,随着函数的结束,会自动关闭么?如果不自动关闭,会有什么后果。 2.在进程a中定义 sem_t* sem1;然后用sem1=sem_open("sem1",O_CREAT,0666,1);打开了有名信号灯...
1.用sem1=sem_open("sem1",O_CREAT,0666,1);打开了一个信号灯,但是不关,随着函数的结束,会自动关闭么?如果不自动关闭,会有什么后果。
2.在进程a中定义 sem_t* sem1;然后用sem1=sem_open("sem1",O_CREAT,0666,1);打开了有名信号灯,在进程b中,也定义 sem_t* sem1;然后用sem1=sem_open("sem1",O_CREAT,0666,1);然后执行sem_close(sem1);会不会影响进程a的信号灯?
我的感觉是不会,不知道到底影响与否
2.在进程a中定义 sem_t* sem1;然后用sem1=sem_open("sem1",O_CREAT,0666,1);打开了有名信号灯,在进程b中,也定义 sem_t* sem1;然后用sem1=sem_open("sem1",O_CREAT,0666,1);然后执行sem_close(sem1);会不会影响进程a的信号灯?
我的感觉是不会,不知道到底影响与否
|
就是说当一个进程close一个信号灯的时候,仅仅是关掉了此进程内指向这个有名信号灯的指针而已。有名信号灯并没有在系统中被删除,直到系统关闭或者 unlink为止。——我一直是这么理解的,希望没有错误
|
可以将管道、共享内存、信号灯等,都看成由操作系统控制的一块内存。如果你在程序中不释放它们,在命令行中也不释放,那么它们将一直保存。直到系统重新启动。
由于内存是有限的,所以它们的数量也是有限的。
由于内存是有限的,所以它们的数量也是有限的。
|
正解。有些资源不显式释放可能就不释放了