【问题标题】:How to portably share a variable between threads/processes?如何在线程/进程之间可移植地共享变量?
【发布时间】:2014-09-03 16:03:14
【问题描述】:

我有一个服务器,它为每个传入的请求生成一个新进程或线程,我需要从线程和进程读取和写入该服务器中定义的变量。由于服务器程序需要同时在 UNIX 和 Windows 上运行,我需要以可移植的方式共享变量,但我该怎么做呢?

我需要使用标准 C 库或原生系统调用,所以请不要推荐第三方库。

【问题讨论】:

    标签: c windows unix


    【解决方案1】:

    shared memory 是特定于操作系统的。在 Linux 上,考虑阅读 shm_overview(7) 和(因为使用共享内存,您总是需要某种方式来同步)sem_overview(7)

    当然,您需要找出类似(但可能不等同)的 Windows 函数调用。

    注意threadsprocesses 不同。根据定义,线程共享一个共同的address space。对于线程,主要问题主要是同步,通常使用mutexes(例如pthread_mutex_lock等...)。在 Linux 上,阅读 pthread tutorialpthreads(7)

    回想一下,有几个库(glibQtCorePoco、...)在操作系统特定功能之上提供了有用的抽象,但您似乎希望避免使用它们。

    最后,我完全不确定像您要求的那样共享变量是实现目标的最佳方式(我肯定会考虑使用event loopmessage passing 方法:pipe(7)poll(2) ,也许是 textual protocol à la JSON)。

    【讨论】:

    • +1。几乎等效的 Windows 端也通过内存映射文件完成,使用对 CreateFile()CreateFileMapping()MapViewOfFile() 等的调用。然而,同步的东西明显不同(信号量和互斥体被创建为全局内核 objs配置安全描述符,而不仅仅是存储在共享内存中)。不错的答案,顺便说一句。
    • 您可以通过创建线程/ID 池并使用该池来节省大量执行时间,而不是花时间在读取时创建线程(也必须实时销毁)跨度>
    猜你喜欢
    • 2017-08-08
    • 2021-01-27
    • 2019-05-01
    • 2012-04-09
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多