温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java并发中如何证明偏向锁

发布时间:2021-10-20 09:25:11 来源:亿速云 阅读:105 作者:柒染 栏目:大数据

本篇文章为大家展示了Java并发中如何证明偏向锁,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

glibc 重新编译

1.1 初始化环境

glibc版本: ldd --version

Java并发中如何证明偏向锁

gcc 安装: yum -y install gcc

检查yum中openjdk版本: yum search java | grep -i --color jdk

openjdk 安装: yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64

系统环境版本:

Java并发中如何证明偏向锁

yum -y install lrzsz

1.2 重新编译glibc库文件

1.2.1、这里glibc版本: glibc-2.19.tar.gz

Java并发中如何证明偏向锁

1.2.2、解压: tar -zxvf glibc-2.19.tar.gz

Java并发中如何证明偏向锁

1.2.3、找个这个文件: /glibc-2.19/nptl/pthread_mutex_lock.c

Java并发中如何证明偏向锁

1.2.4、修个这个文件: __pthread_mutex_lock 此方法

Java并发中如何证明偏向锁

fprintf(stderr,"msg tid=%lu\n",pthread_self());

添加此包,不要忘记

#include <stdio.h>

Java并发中如何证明偏向锁

未来任何线程调用pthread_mutex_lock()都会打印msg tid=123456677(tid)

1.2.5、覆盖pthread_mutex_lock.c

修改权限664 --> chmod -R 664 pthread_mutex_lock.c

Java并发中如何证明偏向锁

执行命令:../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

--disable-profile 参数:编译库但不包含分析信息。如果临时工具需要分析信息则忽略此选项。

--enable-add-ons 参数:指示 Glibc 使用附加的 NPTL 包作为线程库。

--with-headers=/usr/include 参数:告诉 Glibc 利用刚刚安装在 usr 文件夹中的头文件编译自身,此能够根据内核的具体特性提供更好的优化。

--with-binutils=/usr/bin 参数:指定Binutils 程序目录路径。这个参数并不是必需的,但它们能保证在编译 Glibc 时不会用错 Binutils 程序。

有些安装方法是编译时候指定的目录不是/usr,而是通过建立软链指向新的libc-2.18.so版本,在此过程中需要删除原来连接,建立新的软连接,但是此处有一个大坑,就是当你删除libc.so.6之后会导致系统命令不可用。

Java并发中如何证明偏向锁

编译: make

Java并发中如何证明偏向锁

编译: make install

编译结果: 测试下

Java并发中如何证明偏向锁

说明 到此已经成功了,下面看看当前glibc版本: ldd --version

Java并发中如何证明偏向锁

当前版本就是我上传的 glibc 2.1.9。

1.3 扩展知识pthread_mutex_lock.c

  • int pthread_mutex_init (pthread_mutex_t *__mutex,const pthread_mutexattr_t *__mutexattr)创建一个锁;

  • int pthread_mutex_destroy (pthread_mutex_t *__mutex)销毁锁;

  • int pthread_mutex_trylock (pthread_mutex_t *__mutex)尝试去lock,lock不到时立即返回错误;

  • int pthread_mutex_lock (pthread_mutex_t *__mutex)尝试去lock,lock不到时永久等待;

  • int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, const struct timespec *__restrict __abstime)尝试去lock,lock不到时等待__abstime的时间;

  • int pthread_mutex_unlock (pthread_mutex_t *__mutex)释放一个锁;

  • int pthread_mutexattr_init (pthread_mutexattr_t *__attr)初始化锁参数;

  • int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)销毁锁参数

  • int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,int __pshared)设定锁的进程共享属性;

  • int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)设定锁的加锁类型;

  • int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,int __protocol)设定锁对线程优先级的影响策略;

看到上面这面方法名字是不是狠亲切,跟java j.u.c 里面方面是不是很像

上述内容就是Java并发中如何证明偏向锁,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI