Multithreading 我的代码出了什么问题?使用信号量时,全局变量值已更改
a值已更改,但请注意printf(“%d”,a)在sem_wait下,我的代码有什么问题 信号量只提供建议锁定。他们不知道变量之类的,他们锁定代码的区域。它们不强制执行任何操作,因此您必须自己调用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 (&
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);
}