首页 > 解决方案 > 在线程中同时使用 char 驱动程序文件处理程序时是否需要同步?

问题描述

我正在编写一个库/API 来与我的设备驱动程序进行通信。

class pcie_dev
{
public:
    pcie_dev(unsigned int bdf=0, int bar=-1);
    ~pcie_dev(void);

private:
    ssize_t m_dev_handle; // device file
};

构造函数pcie_dev打开设备文件并更新m_dev_handle. 它还创建了一个新线程,该线程进行 IOCTL 调用,大部分时间都会休眠。

pcie_dev::pcie_dev(unsigned int bdf, int bar)
{
    ssize_t fd;

    fd = open(DEV_FILENAME, O_RDWR | O_CLOEXEC);

    if (fd == -1) {
        throw std::runtime_error("could not open character device");
    }
    m_dev_handle = fd;

[do some stuffs]

    std::thread threadIrq(threadProcess, m_dev_handle);
};

新的线程函数不是方法,它是类外的静态函数,但在同一个文件中。

static void threadProcess(ssize_t m_dev_handle)
{
  int result;
  uint32_t subIrq;
  while(1)
  {
    result = ioctl(m_dev_handle, PCIE_IOCTL_IRQ_PROCESS, (void*) NULL);
    if (result == 0) {
        printf("Process woke up\n");
    }
  }
}

问题:

要知道:

标签: c++multithreadingdriver

解决方案


推荐阅读