futex验证_fulvic

futex验证_fulvic1,验证代码转载#include#include#include#include#includesem_tsem_a;void*task1();intmain(void){ intret=0; pthread_tthrd1; sem_init(&sem_a,0,1);  //createchildrenpr

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1,验证代码转载

#include <semaphore.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

sem_t sem_a;
void *task1();

int main(void){

  int ret=0;
  pthread_t thrd1;
  sem_init(&sem_a,0,1);
 
 //create children process
  ret=pthread_create(&thrd1,NULL,task1,NULL);
  
 //waiting for children process end
    pthread_join(thrd1,NULL);
}

void *task1()
{

  int sval = 0;

  //holding the semaphore
   sem_wait(&sem_a);
 
   sleep(5); //do_nothing
   sem_getvalue(&sem_a,&sval);
   printf(“sem value = %d\n”,sval);
   //release the semaphore
   sem_post(&sem_a);

}

执行反馈结果:

sem value = 0

 

2,gcc -o t_mutex t_mutex -lpthread

备注:pthread库不是Linux系统默认的库,连接时需要使用静态库libpthread.a,所以在线程函数在编译时,需要连接库函数

 

3,跟踪执行过程

strace -o t1_mutex.str ./t1_mutex

sem value = 0
[root@SZB-L0004396 appcode]# less t1_mutex.str
execve(“./t1_mutex”, [“./t1_mutex”], [/* 19 vars */]) = 0
brk(0)                                  = 0x237e000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fac07ffe000
access(“/etc/ld.so.preload”, R_OK)      = -1 ENOENT (No such file or directory)
open(“/etc/ld.so.cache”, O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=72041, …}) = 0
mmap(NULL, 72041, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fac07fec000
close(3)                                = 0
open(“/lib64/libpthread.so.0”, O_RDONLY|O_CLOEXEC) = 3
read(3, “\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240l\0\0\0\0\0\0″…, 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=141616, …}) = 0
mmap(NULL, 2208864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fac07bc3000
mprotect(0x7fac07bd9000, 2097152, PROT_NONE) = 0
mmap(0x7fac07dd9000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7fac07dd9000
mmap(0x7fac07ddb000, 13408, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fac07ddb000
close(3)                                = 0
open(“/lib64/libc.so.6”, O_RDONLY|O_CLOEXEC) = 3
read(3, “\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\34\2\0\0\0\0\0″…, 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2107768, …}) = 0
mmap(NULL, 3932736, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fac07802000
mprotect(0x7fac079b8000, 2097152, PROT_NONE) = 0
mmap(0x7fac07bb8000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7fac07bb8000
mmap(0x7fac07bbe000, 16960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fac07bbe000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fac07feb000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fac07fe9000
arch_prctl(ARCH_SET_FS, 0x7fac07fe9740) = 0
mprotect(0x7fac07bb8000, 16384, PROT_READ) = 0
mprotect(0x7fac07dd9000, 4096, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7fac07fff000, 4096, PROT_READ) = 0
munmap(0x7fac07fec000, 72041)           = 0
set_tid_address(0x7fac07fe9a10)         = 9159
set_robust_list(0x7fac07fe9a20, 24)     = 0
rt_sigaction(SIGRTMIN, {0x7fac07bc9780, [], SA_RESTORER|SA_SIGINFO, 0x7fac07bd2130}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x7fac07bc9810, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fac07bd2130}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7fac07001000
brk(0)                                  = 0x237e000
brk(0x239f000)                          = 0x239f000
brk(0)                                  = 0x239f000
mprotect(0x7fac07001000, 4096, PROT_NONE) = 0
clone(child_stack=0x7fac07800fb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fac078019d0, tls=0x7fac07801700, child_tidptr=0x7fac078019d0) = 9160
futex(0x7fac078019d0, FUTEX_WAIT, 9160, NULL) = 0
exit_group(0)                           = ?
+++ exited with 0 +++

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190926.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月11日 上午11:15
下一篇 2026年2月11日 上午11:43


相关推荐

  • N8N工作流中文转换神器!一键转中文

    N8N工作流中文转换神器!一键转中文

    2026年3月15日
    2
  • robotium例子

    robotium例子android基础知识12:android自动化测试04—Robotium:实例(上):http://daimajishu.iteye.com/blog/1556631robotium方法学习实例:http://blog.csdn.net/gzh0222/article/details/7335666Android自动化测试—Robotium:实例(上):http:/

    2022年7月25日
    10
  • Try catch如何使用[通俗易懂]

    Try catch如何使用[通俗易懂]trycatch适用场合:一、兼容性浏览器的兼容性是程序员很头痛的事儿,往往一些出错会让我们查找许久,在使用trycatch能更好的解决兼容性出错的问题:由于不同浏览器报错提示也不尽相同,通过使用trycatch捕获的浏览器的报错提示,来判断用户使用的浏览器,然后做出对应的解决方法;那么,你如果用if,就只能反馈真或假,而不能直接抛出浏览器的报错内容。二、防止阻塞trycatch用…

    2022年6月20日
    46
  • Sequelize.js 入门

    Sequelize.js 入门0 说明学习 sequelize js 官方文档 http docs sequelizejs com manual installation getting started html 本文档对应的 github 路径 https github com alex my javascript learn tree master sequelize 本文需要一点点 ES6 的知识 如果你不懂 可以

    2026年3月18日
    3
  • 在PyCharm环境下使用Jupyter Notebook

    在PyCharm环境下使用Jupyter Notebook1 安装 JupyterNoteb 打开 Pytharm 中的 setting 找到 ProjectInter 里面通过 号添加 如下图 然后搜索 Jupyter 点击 install 安装 2 在 PyCharm 中新建 JupyterNoteb 文件步骤 File gt New gt JupyterNoteb gt 输入文件名建好之后效果如下图

    2026年3月19日
    1
  • MATLAB2016b安装包

    MATLAB2016b安装包百度云盘链接:(https://pan.baidu.com/s/17NdGN-GviFWlUfMrTZA_Kw)密码:p4ue

    2022年5月29日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号