Multithreading 我的代码出了什么问题?使用信号量时,全局变量值已更改

Multithreading 我的代码出了什么问题?使用信号量时,全局变量值已更改,multithreading,pthreads,posix,semaphore,Multithreading,Pthreads,Posix,Semaphore,a值已更改,但请注意printf(“%d”,a)在sem_wait下,我的代码有什么问题 信号量只提供建议锁定。他们不知道变量之类的,他们锁定代码的区域。它们不强制执行任何操作,因此您必须自己调用wait和post 下面是在您的示例中使用的wait和post的真正含义 62 hello 75. 在我看来,main在进入前请求许可func在修改a之前不请求权限 所以func应该wait和post sem_wait (&

a值已更改,但请注意printf(“%d”,a)在sem_wait下,我的代码有什么问题

信号量只提供建议锁定。他们不知道变量之类的,他们锁定代码的区域。它们不强制执行任何操作,因此您必须自己调用
wait
post

下面是在您的示例中使用的
wait
和post的真正含义

           62 
           hello 
           75.
在我看来,
main
在进入前请求许可
func
在修改
a
之前不请求权限

所以
func
应该
wait
post

sem_wait (&semaphore1); /* AKA "may I enter this region" */

sem_post(&semaphore1); /* AKA "I am done with this region. */

当然,对于这个
sempahore1
应该是全局可访问的。

你所说的互斥是什么意思?@niko你确实像互斥一样使用信号量。但这不是问题:)它的lock()概念类似于C#
sem_wait (&semaphore1); /* AKA "may I enter this region" */

sem_post(&semaphore1); /* AKA "I am done with this region. */
void func()
{
    sem_wait (&semaphore1);
    a=45;
    sleep(1);
    a=32;
    a=75;
    printf("hello");
    sem_post (&semaphore1);
}