- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有以下测试程序。
#include <iostream>
#include <cstdlib>
using namespace std;
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;
int main(int argc, char *argv[])
{
int iret;
iret = pthread_mutex_trylock( & mymutex );
cout << "Test2 !!! " << endl;
pthread_mutex_unlock( & mymutex );
return EXIT_SUCCESS;
}
如果我在不添加 pthread 库的情况下编译它,我会收到 pthread_mutex_trylock 未解决错误的错误,但仅适用于函数 pthread_mutex_trylock。
如果我将 pthread_mutex_trylock 替换为 pthread_mutex_trylock,则程序在没有 -lpthread* 选项的情况下也能很好地编译和运行。
如果我将 -lpthraed 选项添加到编译命令中,所有运行良好这运行良好:$ g++ test2.c -o test2 -lpthread此警告未解决:$ g++ test2.c -o test2
错误输出示例: $ g++ test2.c -o test2 /tmp/ccU1bBdU.o:在函数 main' 中:
pthread_mutex_trylock' collect2: ld 返回 1 个退出状态
test2.c:(.text+0x11): undefined reference
如果我替换指令 iret = pthread_mutex_trylock( & mymutex );
使用 iret = pthread_mutex_lock( & mymutex ); 如果没有将 pthread 库添加到编译命令中,程序也会编译并运行而不会出错我知道如果我不使用 -lpthread 选项,出现 Unresolved 错误是正确的,但为什么其他 pthread_ 函数也没有相同的未解决错误?
我在 fedora 12 上使用 gcc 4.4.2
$ g++ --version
g++ (GCC) 4.4.2 20091222 (Red Hat 4.4.2-20)
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
是否有人对仅针对 pthread_mutex_trylock 的取消引用的含义有一些建议?
感谢恩佐的帮助
最佳答案
如果你使用 pthread 函数,你应该用 -lpthread
链接你的目标文件,而不用担心符号是否包含在 libc
中。
这背后的基本原理是said就是这样:前段时间,当使用线程的应用程序在没有线程支持的系统上运行时,会使用 libc 中的 stub 。在这样的系统上,pthread_*
函数链接到 libc
stub ,该 stub 返回错误,表明没有线程功能。在“线程”系统上,它们被链接到 pthread
库并正常工作。
很明显,pthread_mutex_trylock
函数是在策略改为与-lpthread
链接后出现的。所以没有 stub 。
关于c++ - 未定义对 `pthread_mutex_trylock' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009625/
我花了一周的时间来修复一个程序,一开始我得到了SIGBUS,但经过多次尝试后程序仍然得到了SIGSEGV段错误,在下面我发布了段错误日志+源代码。如果专家帮助我修复此段错误错误,我将非常感激。任何建议
我正在使用 pthread_mutex_trylock 将互斥锁锁定在一个结构上,以便它只能在给定时间由单个线程访问/修改。如果互斥体已经被锁定,我只是从例程返回而不是排队/阻塞。 这是我的代码的基本
在我的代码中,我使用 pthread_mutx_trylock() 来检查线程 1 是否已完成他的任务工作并释放互斥锁吗?请让我知道它是否有效? 在线程 1 中: pthread_mutex
/////////////////////////////////* pthread_mutex_t stop = PTHREAD_MUTEX_INITIALIZER; int a = 1; void
我正在学习在 Linux 编程中使用互斥量。我遇到了 trylock 函数,它首先检查互斥量是否可用,否则将其锁定,然后返回。 现在我的问题是: 调用trylock时,是否在未执行临界区的情况下到达函
最近看了memcached的源码,在文件 memcached.h 中。我找到了这段代码: static inline int mutex_lock(pthread_mutex_t *mutex) {
我有以下测试程序。 #include #include using namespace std; pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIA
pthread_mutex_trylock 检测死锁,不阻塞,那你为什么“需要” pthread_mutex_lock? 也许当你故意想让线程阻塞?但那样的话可能会导致死锁? 最佳答案 pthread
一旦线程被取消,就需要解锁互斥体,以避免死锁。所以我设计了以下方法: // file_a.c pthread_attr_t attr; ... rc2 = pthread_attr_init(&att
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
这是对 this 的跟进问题。 在该代码中,当我不使用 fflush(stdout) 时,当我保持 sleep(1) 时,输出不会刷新到屏幕上。 #define S sleep(0) void* xT
我是一名优秀的程序员,十分优秀!