请问能够实现在UNIX下,一个进程下创建两个线程调用多个函数的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问能够实现在UNIX下,一个进程下创建两个线程调用多个函数的问题相关的知识,希望对你有一定的参考价值。
一个进程下创建两个线程,一个线程执行fun1()函数,另一个线程同时执行fun2(),这两个函数不存在共享资源的问题,即不用考虑互斥问题。当他们分别执行完后,返回值给进程,然后再调用相应的另一个函数fun13()(fun1调用)和fun24()(fun2调用),然后fun13和fun24执行完毕后返回值给进程。两个线程并行运行。这种设计可以实现么?请大虾帮忙啊
参考技术A wait --notify在不使用文件系统的情况下,Unix 上的 0 拷贝进程间通信
【中文标题】在不使用文件系统的情况下,Unix 上的 0 拷贝进程间通信【英文标题】:0-copy inter-process communication on Unix without using the filesystem 【发布时间】:2011-07-25 23:18:00 【问题描述】:如果我必须在两个进程之间移动适量的内存,我可以执行以下操作:
创建一个用于写入的文件 截断到所需大小 mmap 并取消链接 根据需要使用当另一个进程需要该数据时,它:
通过 unix 套接字连接到第一个进程 第一个进程通过unix socket消息发送文件的fd mmap fd 根据需要使用这允许我们在没有任何副本的情况下在进程之间移动内存 - 但创建的文件必须在内存挂载的文件系统上,否则我们可能会遇到磁盘命中,这会降低性能。有没有办法在不使用文件系统的情况下做这样的事情?一个类似 malloc 的函数会返回一个 fd 和一个指针。
[编辑] 拥有一个文件描述符还提供了一个由内核维护的引用计数机制。
【问题讨论】:
Shared memory? System V 共享内存不是已经过时了吗? 很少使用?最可能。过时的?我不这么认为,而且我不知道有任何证据。 @Penz:System V 共享内存比 POSIX 更 SUS(单一 Unix 规范),但在 POSIX 2008 站点上列出,没有任何“obs”标记。 【参考方案1】:System V 或POSIX 共享内存有什么问题吗(它们有些不同,但结果相同)?对于任何这样的系统,您必须担心进程在访问内存时之间的协调,但对于内存映射文件也是如此。
【讨论】:
shm_open 如果有办法创建匿名共享内存对象并只使用 fd. System V 也有这个问题,还有其他问题:持久性需要显式解除分配,当相同的数据被发送到多个问题时,这可能是一个问题。使用 fd,我们可以免费获得引用计数。以上是关于请问能够实现在UNIX下,一个进程下创建两个线程调用多个函数的问题的主要内容,如果未能解决你的问题,请参考以下文章