我知道在 C 中的函数内声明一个静态变量意味着该变量在函数调用之间保持其状态。在线程的上下文中,这会导致变量在多个线程上保持其状态,还是在每个线程之间具有单独的状态?
这是我正在努力回答的过去的纸质考试问题:
以下 C 函数旨在用于为其调用者分配唯一标识符 (UID):
get_uid() { static int i = 0; return i++; }
解释 get_uid() 在被多个线程调用的环境中以何种方式可能无法正常工作。使用特定的示例场景,详细说明为什么以及如何可能会发生这种不正确的行为。
目前我假设每个线程都有一个单独的变量状态,但我不确定这是否正确,或者答案是否更多地与缺乏互斥有关。如果是这样的话,那么在这个例子中如何实现信号量呢?