c++ - 使用 C++ 在 Linux 0.01 中为 "Semaphore"添加系统调用

标签 c++ linux semaphore system-calls

<分区>

我正在尝试弄清楚如何在 Linux 0.01 中实现一组提供信号量(无忙等待)模块的系统调用。我希望这些系统调用允许进程请求新的信号量并将其用于进程同步。

我想用 C++ 编写这些程序,但我无法让它们正常工作。谁有简单的解决方案?

  • (系统调用#110)int sema_request(int value):如果成功,该函数返回一个新的信号量,否则返回-1。新的信号量被初始化为“值”。您的实现应在整个操作系统中支持至少 10 种不同的信号量。
  • (系统调用#111) int sema_wait(int s):这个函数实现了对信号量s的“等待”操作。如果成功则返回 0,否则返回 -1。
  • (系统调用#112)int sema_signal(int s):该函数对信号量 s 执行“信号”操作。如果成功则返回 0,否则返回 -1。

最佳答案

如果其他人正在为您完成您的工作,您将学习太多,但这是我写的用户模式信号量实现:

https://github.com/vinniefalco/VFLib/blob/master/modules/vf_core/threads/vf_Semaphore.h https://github.com/vinniefalco/vflib/blob/master/modules/vf_core/threads/vf_semaphore.cpp

您当然需要根据您的环境(分别是条件变量、互斥量和原子整数操作)将 WaitableEvent、SpinLock 和 Atomic 映射到它们适当的对应项。您还需要提供一个简单的堆栈,或者您可以从我的库中调整无锁实现。请注意,如果您决定使用无锁,则必须保留“已删除列表”,否则您将遇到 ABA 问题。

关于c++ - 使用 C++ 在 Linux 0.01 中为 "Semaphore"添加系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379696/

相关文章:

c++ - 当调用包含的对象函数时,std::Optional 是否转发右值?

c++ - 如何在现代 C++ 的 JSON 中迭代 JSON

c - 如何使用 glibc 的调试版本来构建程序?

linux - 更改 NFS 共享的所有者

linux - 使用 bash 命令删除下一行、空格

c++ - 以两个对象作为参数的函数

java - 信号量保证 FIFO?

c++ - Windows API "Chess Timer"Sepmaphore 事件

java - 使用信号量的生产者消费者有界缓冲区

c++ - 指针值未正确传递给重载的等于运算符 (C++)