小编Dan*_*ira的帖子

IBM 示例代码,不可重入函数在我的系统中不起作用

我正在学习编程的重入性。在IBM 的这个站点上(非常好)。我已经建立了一个代码,复制在下面。这是第一个在网站上滚动的代码。

该代码尝试通过打印在“危险上下文”中不断变化的两个值来显示涉及在文本程序的非线性开发(异步性)中共享访问变量的问题。

#include <signal.h>
#include <stdio.h>

struct two_int { int a, b; } data;

void signal_handler(int signum){
   printf ("%d, %d\n", data.a, data.b);
   alarm (1);
}

int main (void){
   static struct two_int zeros = { 0, 0 }, ones = { 1, 1 };

   signal (SIGALRM, signal_handler); 
   data = zeros;
   alarm (1);
   while (1){
       data = zeros;
       data = ones;
   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行代码时出现问题(或者更好,没有出现)。我在默认配置中使用 gcc 版本 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)。不会发生被误导的输出。获得“错误”对值的频率为 0!

到底发生了什么?为什么使用静态全局变量重入没有问题?

c gcc signals x86-64 data-race

11
推荐指数
2
解决办法
169
查看次数

POSIX 中的 fopen 与 open(C 语言)

这个问题问完之后,一个疑问就来了:

一旦fopen()比open()更快(至少对于顺序写入/就绪操作),前者是一个库,后者是一个系统调用,那么fopen()在 POSIX 兼容操作系统中执行什么系统调用?

c io fopen posix

2
推荐指数
1
解决办法
927
查看次数

标签 统计

c ×2

data-race ×1

fopen ×1

gcc ×1

io ×1

posix ×1

signals ×1

x86-64 ×1