我写了以下最小示例:

#include

#include

#include

#define SUCCESS 0

using namespace std;

int main() {

int res;

pthread_mutex_t t;

pthread_mutex_init(&t, NULL);

res = pthread_mutex_lock(&t);

res = pthread_mutex_destroy(&t);

if (res != SUCCESS)

{

cout << "Failed to delete: " << strerror(res) << " # " << t.__data.__lock << " " << t.__data.__nusers << endl;

}

else

{

cout << "Deleted!"<< endl;

}

res = pthread_mutex_unlock(&t);

cout << res << endl;

pthread_exit(NULL);

return 0;

}

Attempting to destroy a locked mutex or a mutex that is referenced (for example, while being used in a pthread_cond_timedwait() or pthread_cond_wait()) by another thread results in undefined behavior.

因此,可以假设,如果它是同一线程,那就可以了.

奇怪的是,这句话在较旧的版本中已更改,因此不存在,并且该行仅表示

It shall be safe to destroy an initialized mutex that is unlocked. Attempting to destroy a locked mutex results in undefined behavior.

因此,认为此更改是出于某种原因并不是一件容易的事,我只是想确定一下.

我在两个不同的linux系统(ubuntu 13.10和另一个debian 5774)上测试了前面提到的代码,它失败并显示“无法删除:设备或资源繁忙#1 1”,在ideone的平台上它成功了.

ideones的行为仅仅是未定义行为的一个特例吗?还是其他情况有问题?

不幸的是,我找不到专门解决此问题的资源.

linux 互斥锁销毁_c-销毁锁定的互斥锁时pthread_mutex_destroy的正...相关推荐

  1. java 并发锁_Java并发教程–锁定:内在锁

    java 并发锁 在之前的文章中,我们回顾了在不同线程之间共享数据的一些主要风险(例如原子性和可见性 )以及如何设计类以安全地共享( 线程安全的设计 ). 但是,在许多情况下,我们将需要共享可变数据, ...

  2. c++ linux 线程等待与唤醒_C++ Linux线程同步机制:POSIX信号量,互斥锁,条件变量...

    线程同步机制:POSIX 信号量,互斥量,条件变量 POSIX 信号量 常用的POSIX 信号量函数为如下5个: sem_init sem_destroy sem_wait sem_trywait s ...

  3. Linux系统编程----16(线程同步,互斥量 mutex,互斥锁的相关函数,死锁,读写锁)

    同步概念 所谓同步,即同时起步,协调一致.不同的对象,对"同步"的理解方式略有不同.如,设备同步,是指在两 个设备之间规定一个共同的时间参考:数据库同步,是指让两个或多个数据库内容 ...

  4. Linux内核中锁机制之完成量、互斥量

    在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...

  5. Linux文件系统、虚拟内存、进程与线程、锁

    文章目录 文件系统 su Linux 中默认没有 super 命令 /proc /etc /var /root /home /bin /dev /lib /sbin tmp 句柄 maxfd PWD ...

  6. c++ linux 线程等待与唤醒_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  7. 自旋锁与互斥锁的对比、手工实现自旋锁

    自旋锁与互斥锁的对比.手工实现自旋锁 版权声明:本文为博主原创文章,转载请注明出处,谢谢. https://blog.csdn.net/FreeeLinux/article/details/53695 ...

  8. c++ 11 std::recursive_timed_mutex递归锁定的互斥,并实现有时限锁定

    定义于头文件 <mutex> std::recursive_timed_mutex class recursive_timed_mutex; (C++11 起) recursive_tim ...

  9. 自旋锁和互斥锁实例_多线程编程之自旋锁

    一.什么是自旋锁 一直以为自旋锁也是用于多线程互斥的一种锁,原来不是! 自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制.自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用 ...

最新文章

  1. python查找字符串出现次数_Python 中找出字符串中出现频率最高的字母
  2. java.security.InvalidKeyException: Illegal key size异常解决
  3. DQL数据查询语言——连接查询
  4. Response.Redirect(),Server.Transfer(),Server.Execute()的区别与网站优化
  5. CanvasRenderingContext2D(渲染上下文对象)
  6. c# 操作excle
  7. Java ObjectOutputStream flush()方法与示例
  8. ehcache memcache redis 三大缓存男高音
  9. Intent传递数据时,可以传递哪些类型数据
  10. vb把窗体嵌入桌面底层_桌面透明便签插件便签软件
  11. 《正则表达式必知必会》读书笔记【语法整理】
  12. 阿里云oss Referer设置
  13. 文件查找以及文件内容查找
  14. 如何阅读《如何阅读一本书》?
  15. 12个VSCode插件工具
  16. [Ansible系列②]Ansible使用说明
  17. 解耦java_工厂模式实现解耦
  18. 论文阅读 2017 —— Sensor Fusion for Fiducial Tags: Highly Robust Pose Estimation from Single Frame RGBD
  19. 车道线检测1-传统算法相关简介
  20. 自己搭建的k8s集群,怎么做负载均衡?

热门文章

  1. druid配置数据库连接使用密文密码
  2. Android中Handler的使用
  3. iptables的conntrack表满了导致访问网站很慢
  4. Cesium 创建Geometry
  5. Educational Codeforces Round 12 A. Buses Between Cities 水题
  6. Javascript获取当月的天数
  7. Android菜单详解(一)——理解android中的Menu
  8. js 后台调用前台的JS
  9. 配置MOSS的FBA步骤与问题(发现设置权限策略的里选人不好用,选不到Provider的人)...
  10. Linux(Contos7.5)环境搭建之Gitblit安装(三)