Visual Studio的fread函数“锁定其他线程”。 有一个另外的版本_fread_nolock,它可以“在不锁定其他线程的情况下”读取,应该只在“线程安全的上下文中使用,例如单线程应用程序或调用范围已经处理了线程隔离”的情况下使用。
即使在阅读其他相关讨论后,我仍然不清楚locking fread实现的是特定的FILE结构、特定的实际文件还是完全不同文件上的所有fread调用。
如果您使用nolock版本,需要提供什么级别的锁定?多个线程可以并行读取不同文件而不需要任何锁定吗?多个线程可以并行写入不同文件而不需要任何锁定吗?或者是否涉及全局或静态变量会被破坏?
因此,通过使用nolock版本,您能否潜在地实现更好的I/O吞吐量(如果您不需要不必要地移动磁头,例如从不同驱动器或SSD驱动器读取),或者潜在的收益仅仅是将冗余锁定减少到单个锁定(这应该是可以忽略的)。
VS的ifstream.read函数是否与常规fread函数完全相同?(我没有看到它的nolock版本。)
即使在阅读其他相关讨论后,我仍然不清楚locking fread实现的是特定的FILE结构、特定的实际文件还是完全不同文件上的所有fread调用。
如果您使用nolock版本,需要提供什么级别的锁定?多个线程可以并行读取不同文件而不需要任何锁定吗?多个线程可以并行写入不同文件而不需要任何锁定吗?或者是否涉及全局或静态变量会被破坏?
因此,通过使用nolock版本,您能否潜在地实现更好的I/O吞吐量(如果您不需要不必要地移动磁头,例如从不同驱动器或SSD驱动器读取),或者潜在的收益仅仅是将冗余锁定减少到单个锁定(这应该是可以忽略的)。
VS的ifstream.read函数是否与常规fread函数完全相同?(我没有看到它的nolock版本。)