我可以使用互斥体读取和写入 Android 中的同一个文件,而不会出现未定义的行为吗?
Can I read and write to the same file in Android, using mutexes, without having undefined behaviour?
我正在设计一个音乐 Looper,一旦用 x 秒录制了第一个录音,就会重复播放这 x 秒,并在每次迭代中向循环添加新内容。
由于第一个记录的大小可能会有所不同,我无法使用 RAM 分配的内存来执行此操作,我必须将其放入磁盘。
长话短说,我不能花时间在每次循环迭代时关闭文件并再次打开,所以我需要在同一个文件中写入和读取。
如果我用互斥体保护这个文件,我可以在没有未定义行为的情况下做到这一点吗?
Since the size of the first recording can vary, I cannot do this with RAM allocated memory, I must place it to disk.
您的假设完全错误。仅仅因为录制的大小可能会有所不同并不意味着您必须将其放在磁盘上。例如,您可以将录音存储在 std::vector<unsigned char>
中。这是一个保存字节的向量。您可以添加或删除任意数量的字节。甚至这也太低级了。您最好定义自己的特定于应用程序的数据结构,以便能够流畅地修改您的记录,而无需担心文件、字节和内存。
如果您分享几段代码,人们可以就此提出建议。
我正在设计一个音乐 Looper,一旦用 x 秒录制了第一个录音,就会重复播放这 x 秒,并在每次迭代中向循环添加新内容。
由于第一个记录的大小可能会有所不同,我无法使用 RAM 分配的内存来执行此操作,我必须将其放入磁盘。
长话短说,我不能花时间在每次循环迭代时关闭文件并再次打开,所以我需要在同一个文件中写入和读取。
如果我用互斥体保护这个文件,我可以在没有未定义行为的情况下做到这一点吗?
Since the size of the first recording can vary, I cannot do this with RAM allocated memory, I must place it to disk.
您的假设完全错误。仅仅因为录制的大小可能会有所不同并不意味着您必须将其放在磁盘上。例如,您可以将录音存储在 std::vector<unsigned char>
中。这是一个保存字节的向量。您可以添加或删除任意数量的字节。甚至这也太低级了。您最好定义自己的特定于应用程序的数据结构,以便能够流畅地修改您的记录,而无需担心文件、字节和内存。
如果您分享几段代码,人们可以就此提出建议。