gpt4 book ai didi

c - 共享一个缓冲区——线程安全

转载 作者:行者123 更新时间:2023-11-30 14:26:40 26 4
gpt4 key购买 nike

我不太喜欢调度线程,我有大约 4-5 个线程,每个线程都会随机将数据添加到同一个缓冲区。我如何安排线程,这样就不会出现两个或多个线程同时访问缓冲区的情况?我在 Windows 环境下使用 C 进行编码。

提前致谢。

最佳答案

需要保护共享缓冲区免受不同线程的并发读/写操作。应使用同步对象来防止这种情况发生。每当线程想要读取或写入共享缓冲区时,它都会获取锁,在共享缓冲区上执行其操作,并在不再需要缓冲区时释放锁。

示例同步对象为 CriticalSection :

static CRITICAL_SECTION shared_buffer_lock;
static char shared_buffer[10];

int main()
{
InitializeCriticalSection(&shared_buffer_lock);

/* Start threads */
...

/* Wait for threads */
...

DeleteCriticalSection(&shared_buffer_lock);

return 0;
}

/* In thread.. */

/* Obtain sole access to 'shared_buffer' */
EnterCriticalSection(&shared_buffer_lock);

/* Use 'shared_buffer' ... */

/* Release sole access of 'shared_buffer' */
LeaveCriticalSection(&shared_buffer_lock);

关于c - 共享一个缓冲区——线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8795035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com