【发布时间】:2021-03-04 20:04:00
【问题描述】:
发布了几个问题(例如Send flag to cancel CopyFileEx after it has started),这些问题引用了使用 Win32 的CopyFileEx() 函数的pbCancel 参数来取消正在进行的复制的能力。我不清楚的是,为什么在没有任何同步机制(互斥锁等)的情况下在另一个线程中设置该布尔值是安全的?只有当另一个线程将该布尔值设置为 true 时,此功能才真正有用,因为 CopyFileEx() 会阻塞,直到文件复制完成。
这是否依赖于 Windows 平台的特性?
【问题讨论】:
-
文档中没有提到另一个线程。取消操作的主要方法是通过进度回调。您可以从该回调中执行您需要的任何操作,包括读取从不同线程修改的值。没有什么能阻止您根据需要实施任何类型的同步或内存屏障。
-
啊,我明白了。我没有意识到回调在与 copyfileex() 相同的线程中运行。在互联网研究期间,我发现有人在谈论从另一个线程设置它,我认为这并不安全。如果您想发表评论作为答案,我可以接受。
-
这里有什么不安全的设置 boolean (在意义上 0 或不是 0)变量来自另一个线程?这里当然不需要任何同步
标签: winapi thread-safety