Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用具有相同对象的两个线程写入两个不同的文件描述符?_C++_Multithreading - Fatal编程技术网

C++ 使用具有相同对象的两个线程写入两个不同的文件描述符?

C++ 使用具有相同对象的两个线程写入两个不同的文件描述符?,c++,multithreading,C++,Multithreading,所以我有一个类,它的成员指针指向一个对象,这个对象的成员函数使用系统调用来写入文件描述符。 我想用线程扩展它,这样我可以同时写入两个文件描述符(它们不在光盘上)。 当两个线程使用同一个对象的写函数时,这可能吗 int main() { Writer oWr; myClass omyClass(&oWr); unsigned char data[10] ={0} ; int fd1 = open(...); int fd2 = open(...); omyClass.writ

所以我有一个类,它的成员指针指向一个对象,这个对象的成员函数使用系统调用来写入文件描述符。 我想用线程扩展它,这样我可以同时写入两个文件描述符(它们不在光盘上)。 当两个线程使用同一个对象的写函数时,这可能吗

int main()
{
 Writer oWr;
 myClass omyClass(&oWr);
 unsigned char data[10] ={0} ;
 int fd1 = open(...);
 int fd2 = open(...);

 omyClass.write(fd1, data, 10);

 //Create 2 threads using omyClass but with fd1 and fd2


}


class myClass
{
  myClass::myClass( Writer *pWr) : pWriter(pWr)
  {}

  void write(int fd, void* data, int size)
  {
     pWriter->writeraw(fd, data, size);
  }

private:

  Writer *pWriter;
};


class Writer
{

 int writeraw(int fd, void* data, int size)
 {
  int ret = write(fd, data, size);
  return ret;
 }
};

当文件描述符被传递到write函数中时,这里没有问题。

这是可能的,但是如果两个线程碰巧写入同一个文件对象(内核端),结果是不可预测的。使用
pwrite
No,每个线程将写入不同的文件描述符。它们连接到两个usb端点,所以应该不会有问题。像这样忽略写返回值是不好的…这只是一些示例代码来演示。不过还是要谢谢你指出这一点!