私のコードにはバッファがあり、それにデータを追加するコードは次のとおりです。
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' への代入の間で別の割り込みが正確に除外されると、問題が発生する可能性があります。
このコードを改善して安全性を高めるにはどうすればよいですか?
編集:「スレッドセーフ」という用語を使用すべきではなかったのかもしれません。並列で実行されているスレッドはなく、割り込みの可能性があるだけだからです。