- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设此C代码:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
pthread_mutex_t lock;
int a = 0;
void *myThreadFun(void *vargp)
{
pthread_mutex_lock(&lock);
a = 5;
while (1) sleep(1);
pthread_mutex_unlock(&lock);
return NULL;
}
int main()
{
pthread_mutex_init(&lock, NULL);
pthread_t thread_id;
pthread_create(&thread_id, NULL, myThreadFun, NULL);
while (1){
a = 6;
sleep(1);
printf("%d\n", a);
}
pthread_join(thread_id, NULL);
}
5
,但后续输出均为
6
。那个怎么样?
myThreadFun
创建一个锁,并进入无限循环,并且永远不会解锁,那么
main
如何覆盖
a
?
lock
之间的任何内容都将受到保护?即如果我在
myThreadFun
中有更多变量要保护,我只是将它们放在相同的锁之间?
最佳答案
myThreadFun
creates a lock and goes in an infinite loop and never unlocks
main
程序在不请求任何锁定的情况下访问变量。该程序对锁应该保护
a
变量这一事实一无所知。它可以真正用于任何事情。鉴于所有线程都在关键区域的开始处进行锁定并在结束时进行解锁,因此锁仅可防止代码的关键区域同时被多个线程执行。
main
中):
while (1) {
pthread_mutex_lock(&lock);
a = 6;
sleep(1);
printf("%d\n", a);
pthread_mutex_unlock(&lock);
}
Does a lock block access until it's unlocked, or it block access only until its own read/write is done? i.e to prevent a partial read and write?
This still prints 6. I want it to print 5. I want to lock
a
in a thread so no other thread can touch it.
a
变量。如果要获得此结果,则需要将两者同步。换句话说,您希望
main
程序等待,直到线程将变量锁定。
man sem_overview
)。
注意,虽然看起来可以使用另一个互斥锁而不是信号量实现以下目的,但事实并非如此。互斥锁和信号量之间的主要区别在于,互斥锁只能由锁定它的同一线程来解锁,而信号量则可以由不同的线程自由地锁定或解锁。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
sem_t sem_main;
pthread_mutex_t lock_var_a;
int a = 0;
void *myThreadFun(void *vargp)
{
pthread_mutex_lock(&lock_var_a);
// Signal main that I acquired the lock.
sem_post(&sem_main);
a = 5;
while (1) {
printf("Thread: a = %d\n", a);
sleep(1);
}
pthread_mutex_unlock(&lock_var_a);
return NULL;
}
int main()
{
sem_init(&sem_main, 0, 0);
pthread_mutex_init(&lock_var_a, NULL);
pthread_t thread_id;
pthread_create(&thread_id, NULL, myThreadFun, NULL);
// Wait for thread to acquire the lock.
sem_wait(&sem_main);
while (1){
pthread_mutex_lock(&lock_var_a);
// This code will never be executed.
a = 6;
printf("Main: a = %d\n", a);
sleep(1);
pthread_mutex_unlock(&lock_var_a);
}
pthread_join(thread_id, NULL);
}
main
将等待线程获取锁,然后继续。结果输出将是:
Thread: a = 5
Thread: a = 5
Thread: a = 5
...
关于c - 互斥锁在解锁之前是否会阻止访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60834777/
我刚开始学习JSP技术,遇到了瓶颈。 如何从 JSP 声明 block ? 这不起作用: ... 服务器说没有“out”。 U: 我确实知道如何使用返回字符串的方法重写代码,但是有没有办法在 ?
在一个字段中,我想设置一个具有自定义过滤器的自定义分析器-着眼于词干-因此,“闪存卡”和“闪存卡”的词根相同,因此返回的结果相同 当我运行以下查询时,我的命中率很高,但是“闪存卡”和“闪存卡”各自返回
快速提问。 我有一个通过 PInvoke 使用 native DLL 的应用程序,这个 DLL 可能会调用 PostQuitMessage()。 如何避免? (因为我的应用程序不应该关闭) 我试过 A
一些给定的 HTML 文章,例如: Content 与一些基本的 Jquery 结合使用,例如: $(".some_
我正在构建一个灯箱相册。当第一个图像加载时,CSS 转换起作用。当加载后的每个图像都没有。任何想法为什么?加载第一张之后的照片,但没有过渡。 Image.prototype.load = functi
这个问题在这里已经有了答案: Disable recent tasks button on Android 5.0 (2 个答案) 关闭 2 年前。 我知道这个问题之前在这里被问过 Android
我是 Objective-C 的新手,我只是想弄清楚我是否可以使用 block 或选择器作为 UIAlertView 的 UIAlertViewDelegate 参数 - 哪个更合适? 我已经尝试了以
我是 Linux (UNIX) 套接字下套接字编程的新手。我在 Internet 上找到了以下代码,用于为每个连接生成一个线程的 tcp 服务器。但是它不起作用。accept() 函数立即返回,不等待
recv()库函数手册页提到: It returns the number of bytes received. It normally returns any data available, up
我有一个用于其他项目的共享 ts 库。在这个库中有被同一个库的其他资源使用的资源。该库的结构分为 components/*、interfaces/*、services/* 等目录。在每个目录的根目录中
我想在同一行中一个接一个地显示我的 ListView ,但 ListView 显示每个新行中的每个项目。我怎样才能防止换行显示。以便它显示为段落 ListView.builder( shr
我有一个包含数千行的表格。 import React from "react" import { useSelector } from "react-redux"; import { useEffec
假设我通常希望收到关于代码中不完整模式的警告,但有时我知道某个函数的模式不完整,我知道这很好。 是still true GHC 的警告粒度是每个模块的,并且没有办法更改有关特定功能或定义的警告? 最佳
我的网络应用程序发送浏览器通知,我知道如何检查通知的浏览器权限,以及如果未授予权限,如何请求权限。 但是,即使用户授予我的站点发送通知的权限,她可能仍然无法收到通知,因为它们 might be dis
我有 Xcode 3.2.1,并且喜欢使用它,但是当我编辑文本中带有超链接的文件时(例如,带有引用的注释:# see http://example.com)Xcode 将文本变成可点击的超链接。尝试编
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我有一个在 MY_Controller 中运行的 acl。如果权限被拒绝,那么此刻,我只是执行 redirect('denied') - 这是一个非常基本的 Controller ,它加载一个非常基本
我一直很好奇尝试从 Chrome 切换到 Firefox Quantum,但是对于 Web 开发遇到了一个我无法轻松解决的主要障碍——它正在缓存我的本地主机文件,因此当我尝试在本地主机加载各种 emb
这真的让我很兴奋!在任何时候,我都会参与多个项目。当我退出Xcode时,下次打开Xcode时,我前一天的所有项目都会自动一一打开。 经常我最终编辑错误的文件,AHHHHHHHHHHH!我可以阻止这种行
我的Wiki上有500个左右的Spambot和大约5个实际注册用户。我已经使用nuke删除了他们的页面,但是他们一直在重新发布。我已经使用reCaptcha控制了spambot的注册。现在,我只需要一
我是一名优秀的程序员,十分优秀!