init_MUTEX被废除

一、在安装模块是出现如下错误:

clip_image001

查看模块信息的命令,如下所示:

clip_image002

而系统的内核版本是:

clip_image003

屏幕剪辑的捕获时间: 2011-07-04 16:20

所以编译模块用的版本号和系统的内核版本不统一,这样内核就会报错,这个功能是用配置选项CONFIG_MODVERSIONS 决定的,如下图:

clip_image004

其中一种解决办法,http://apps.hi.baidu.com/share/detail/14755964 ,当然也可以用与系统一样的内核版本来编译、连接模块。

二、将ll设置成,ls -l,如下图所示:

clip_image005

三、今天在编译ldd3上的scull的时候,出现如下错误:

clip_image006

屏幕剪辑的捕获时间: 2011-07-04 16:12

刚开始我以为没有包含头文件,然后我就去查2.6.39.1的源代码,结果在所有的符号中都没有发现init_MUTEX,后面在网站上发现了init_MUTEX的定义,如下所示:

clip_image007

源码衔接:

http://lxr.oss.org.cn/source/include/asm-i386/semaphore.h#L89

上面的源码是2.6.16以前的,在2.6.25以后就再也找不到这个宏了,原因我目前不清楚,根据定义就已经可以把问题解决了,将代码改成下面的就行了:

clip_image008

最后,成功的make,并且驱动成功的安装到系统当中了:

clip_image009

clip_image010

四、scull测试

利用mknod在scull设备上建立字符文件:

clip_image011

屏幕剪辑的捕获时间: 2011-07-04 16:34

设置量子的大小为6,

如下图所示:

clip_image012

改变量子大小(使用默认的)

clip_image013

屏幕剪辑的捕获时间: 2011-07-04 17:05

转载于:https://www.cnblogs.com/justinzhang/archive/2011/07/18/2109617.html

<think>好的,我需要帮助用户理解如何正确使用pthread_mutex_init来初始化POSIX线程互斥锁,并提供示例代码。首先,我得回顾一下用户提供的引用内容,确保回答准确。 根据引用[2],有两种初始化互斥锁的方法:静态和动态。静态方法使用宏PTHREAD_MUTEX_INITIALIZER,直接赋值给mutex变量。而动态方法需要使用pthread_mutex_init函数,并且需要在使用完毕后调用pthread_mutex_destroy来释放资源。用户的问题是关于pthread_mutex_init的,所以重点放在动态初始化上。 引用[4]给出了函数的原型,参数是mutex指针和属性attr。如果属性为NULL,则使用默认属性。引用[5]提到,如果锁已经被占据,pthread_mutex_trylock会返回EBUSY,这可能对示例代码有帮助,但用户主要关注初始化,这部分可能不需要详细展开。 接下来,我需要确保示例代码正确。动态初始化需要声明mutex变量,然后调用pthread_mutex_init,并在最后销毁。同时,可能需要展示加锁和解锁的过程。比如,在创建线程之前初始化,在线程函数中使用锁,最后在主线程中销毁。 另外,需要注意错误处理。pthread_mutex_init返回0表示成功,其他值表示错误。在示例代码中加入错误检查会更严谨,但用户可能只需要基本用法,所以可以简化,或者注释说明。 可能还需要对比静态和动态两种方式,帮助用户理解何时使用哪种方法。静态方法适用于全局或静态变量,且在程序开始时初始化一次;动态方法允许设置属性,适合需要灵活配置的情况。 最后,确保代码符合POSIX标准,并引用正确的头文件,如pthread.h,以及编译时链接-pthread选项。 现在,整理这些思路,分步骤说明,并给出示例代码。同时,生成相关问题,帮助用户深入理解。</think>### 如何正确初始化POSIX线程互斥锁? POSIX线程互斥锁的初始化分为静态和动态两种方式。以下是具体步骤和示例代码: --- #### **1. 静态初始化** 通过宏`PTHREAD_MUTEX_INITIALIZER`直接赋值给互斥锁变量,适用于全局或静态变量,无需手动销毁。 **示例代码**: ```c #include <pthread.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 静态初始化 int main() { // 使用互斥锁 pthread_mutex_lock(&mutex); // 临界区操作 pthread_mutex_unlock(&mutex); return 0; } ``` --- #### **2. 动态初始化** 使用`pthread_mutex_init()`函数,需手动调用`pthread_mutex_destroy()`释放资源,适用于堆内存或需要自定义属性的场景。 **步骤**: 1. 定义互斥锁变量。 2. 调用`pthread_mutex_init()`初始化。 3. 使用后调用`pthread_mutex_destroy()`销毁。 **示例代码**: ```c #include <pthread.h> #include <stdio.h> int main() { pthread_mutex_t mutex; int ret; // 初始化互斥锁(使用默认属性) ret = pthread_mutex_init(&mutex, NULL); if (ret != 0) { perror("互斥锁初始化失败"); return 1; } // 使用互斥锁 pthread_mutex_lock(&mutex); // 临界区操作 pthread_mutex_unlock(&mutex); // 销毁互斥锁 pthread_mutex_destroy(&mutex); return 0; } ``` --- #### **关键注意事项** 1. **属性参数**:`pthread_mutex_init()`的第二个参数为互斥锁属性(如设置递归锁),若为`NULL`则使用默认属性[^2]。 2. **错误检查**:初始化函数返回非零值表示失败,需处理错误(如示例中的`perror`)。 3. **作用域**:动态初始化的互斥锁必须在使用完毕后销毁,避免资源泄漏。 --- #### **编译说明** 代码需链接`pthread`库: ```bash gcc program.c -o program -lpthread ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值