- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一旦线程被取消,就需要解锁互斥体,以避免死锁。所以我设计了以下方法:
// file_a.c
pthread_attr_t attr;
...
rc2 = pthread_attr_init(&attr);
ERR_IF( rc2 != 0 );
rc2 = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
ERR_IF( rc2 != 0 );
rc2 = pthread_create(&destroy_thread, &attr, destroy_expired_sessions, NULL);
ERR_IF( rc2 != 0 );
...
pthread_attr_destroy(&attr);
static void *destroy_expired_sessions(void *t)
{
...
(void)t;
pthread_cleanup_push(cleanup_handler, NULL);
while (1)
{
... // doing some work here
sleep(min_timeout);
}
pthread_cleanup_pop(0);
}
static void cleanup_handler(void *arg)
{
(void)arg;
authSessionListMutexUnlock();
}
// file_b.c
typedef struct
{
/** Mutex for using this structure. */
pthread_mutex_t mutex;
/** The list of Session nodes. */
cList *list;
} SessionList;
SessionList *globalSessionList = NULL;
...
void authSessionListMutexUnlock()
{
if (pthread_mutex_trylock(&globalSessionList->mutex) == EBUSY)
pthread_mutex_unlock(&globalSessionList->mutex);
}
我在这里使用 pthread_mutex_trylock() 的原因是为了避免在互斥体已在其他地方解锁的情况下再次使用 pthread_mutex_unlock() 。
但是,这里的 pthread_mutex_trylock() 和 pthread_mutex_lock() 导致了段错误。
但是,这里的程序看起来无害,不是吗?
最佳答案
你忘了initialize your mutex using pthread_mutex_init()
.
根据经验,使用未初始化的互斥体是导致程序崩溃的相当安全的选择。
另一种选择是,如果您尝试从锁定互斥锁的另一个线程解锁该互斥锁。该操作的行为未定义。
编辑:关于 trylock/unlock 的快速评论;如果互斥体被锁定,您将得到EBUSY
并解锁它,如果互斥体是空闲的,trylock将成功锁定它并且不会被解锁。换句话说,它将切换互斥体的锁定/解锁状态。真的如你所愿吗?
关于c - pthread_mutex_trylock 和 pthread_mutex_unlock 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9752849/
我有以下源代码(改编 self 的原始代码): #include "stdafx.h" #include #include #include "pthread.h" #define MAX_ENT
pthread_mutex_unlock 在互斥锁上被调用,另一个具有更高实时优先级的线程正在等待那个互斥锁。是在这样的系统调用期间完成上下文切换,还是仅在量子结束后线程才会被抢占?如果在这种情况下无
假设一个线程成功调用pthread_mutex_lock,在同一线程中调用pthread_mutex_unlock是否仍然可能失败?如果是这样,除了中止线程之外,您实际上还能做些什么吗? if(pth
我正在开发一个也能处理错误的线程安全类。我想知道如何处理来自函数 pthread_mutex_unlock() 的可能错误。如果我抛出互斥体仍然被锁定?我应该尝试再次解锁还是销毁类对象? int So
我在 C 中有以下代码: pthread_cleanup_push(pthread_mutex_unlock, &mutex); 但是当我编译它时,我收到以下警告: warning: initiali
假设我锁定了一个名为 wfg 的互斥锁 pthread_mutex_lock(&wfg); //and then I return from the function return 0; 互斥体会保持
来自多处理器编程的艺术, 1 #include 2 #define QSIZE 16 3 typedef struct { 4 int buf[QSIZE]; 5 long head
一旦线程被取消,就需要解锁互斥体,以避免死锁。所以我设计了以下方法: // file_a.c pthread_attr_t attr; ... rc2 = pthread_attr_init(&att
我想知道如果不是多线程上下文,pthread_mutex_lock和pthread_mutex_unlock会造成多少开销,所以我写了一个demo: #include #include #incl
我在 Linux 中使用 pthread 实现手动重置事件,这类似于 Windows 中的 WaitForSingleEvent。我找到了这篇文章 pthread-like windows manua
我用 pthread 编写了一个多线程程序,使用生产者-消费者模型。 当我使用英特尔 VTune 分析器来分析我的程序时,我发现生产者和消费者在 pthread_mutex_unlock 上花费了大量
我在 SAP 代理日志中收到以下错误, (5538F3C3.0122-3154:pthread_mutex_unlock.c,44,"pthread_mutex_unlock") errno EAGA
我已成功使用 makecontext/swapcontext 移动堆栈。但是,当我尝试将它与 pthread_mutex_lock 或 pthread_mutex_unlock 一起使用时,我总是
这个问题在这里已经有了答案: Is function call an effective memory barrier for modern platforms? (4 个答案) 关闭 4 年前。
我有一段代码需要快速运行,现在我正在使用 pthread_mutex_lock/pthread_mutex_unlock 来同步线程,但我发现它对性能有一定的影响。我想知道,如果有人对此进行基准测试,
我是一名优秀的程序员,十分优秀!