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端点,所以应该不会有问题。像这样忽略写返回值是不好的…这只是一些示例代码来演示。不过还是要谢谢你指出这一点!