C++ 我可以在安卓系统中使用互斥体读写同一个文件,而不具有未定义的行为吗?

C++ 我可以在安卓系统中使用互斥体读写同一个文件,而不具有未定义的行为吗?,c++,fstream,C++,Fstream,我正在设计一个音乐循环器,它是这样的东西,一旦第一次录制是用x秒,重复播放这些x秒,在每次迭代中,向循环中添加新内容 由于第一次录制的大小可能会有所不同,所以我无法使用RAM分配的内存来完成此操作,我必须将其放在磁盘上 长话短说,我不能花时间在每次循环迭代中关闭文件并再次打开,所以我需要从同一个文件中写入和读取 如果我用互斥锁保护这个文件,我能在没有未定义行为的情况下保护它吗 由于第一次录制的大小可能会有所不同,所以我无法使用RAM分配的内存来完成此操作,我必须将其放在磁盘上 你的假设完全错误。

我正在设计一个音乐循环器,它是这样的东西,一旦第一次录制是用x秒,重复播放这些x秒,在每次迭代中,向循环中添加新内容

由于第一次录制的大小可能会有所不同,所以我无法使用RAM分配的内存来完成此操作,我必须将其放在磁盘上

长话短说,我不能花时间在每次循环迭代中关闭文件并再次打开,所以我需要从同一个文件中写入和读取

如果我用互斥锁保护这个文件,我能在没有未定义行为的情况下保护它吗

由于第一次录制的大小可能会有所不同,所以我无法使用RAM分配的内存来完成此操作,我必须将其放在磁盘上

你的假设完全错误。仅仅因为录音的大小可以不同并不意味着你们必须把它放在磁盘上。例如,您可以将记录存储在
std::vector
中。这是一个包含字节的向量。您可以添加或删除任意数量的字节。即使这样也太低了。您最好定义自己的特定于应用程序的数据结构,以便能够在不考虑文件、字节和内存的情况下流畅地修改录制


如果您共享几段代码,人们可以提出建议。

多线程期间,互斥用于同步共享数据,因此我有点不确定它们与您的情况有何关联。还有,为什么你不能在RAM中这样做?如果以44100 KHz的频率记录10秒,并使用4字节浮点数,则10*44100*4字节=1.764 Mb。这完全在RAM内存的容量之内。“我不能用RAM分配的内存来做这件事”为什么不呢?如果您总是在读取最后X秒的数据,您就不能为最后X秒的数据保留一个内存缓冲区吗?