在我的代码中,我有一个缓冲区,向其中添加数据的代码是:
bool push_string(file_buffer *cb, const char* message, const unsigned short msglen)
{
unsigned int size = msglen;
if(cb->head >= (cb->size - size))
{
size = cb->size - cb->head - 1;
}
if(size < 1) return false;
char* dest = cb->head += size;
memcpy(dest, message, size);
return (size == msglen);
}
由于我从多个中断添加数据(可以相互豁免),我想知道这段代码是否是线程安全的?我将 'cb->head' 标记为 volatile,但如果另一个中断恰好在 'head' 的增加和对 'dest' 的分配之间排除,事情可能会出错。
如何改进此代码以使其更安全?
编辑:也许我不应该使用“线程安全”这个词,因为没有并行运行的线程,只有中断的可能性。