wsl中编译linux内核模块

发布时间:2023年12月20日

在WSL 2环境中,linux/atomic.h是内核级别的头文件,但是WSL 2并不包含完整的Linux内核源代码。因此,即使您安装了linux-libc-dev包,也无法找到该文件。(安装linux-libc-dev包命令:sudo apt-get install linux-libc-dev
软件源更新:https://blog.csdn.net/weixin_60461563/article/details/121814421

再执行sudo apt-get upgrade

如果您需要使用linux/atomic.h头文件的定义,请尝试使用相应的用户态头文件进行开发,例如,以下是一个使用<stdatomic.h>头文件进行原子操作的简单示例:

#include <stdio.h>
#include <stdatomic.h>
#include <pthread.h>

atomic_int counter = ATOMIC_VAR_INIT(0);

void* increment_counter(void* arg) {
    for (int i = 0; i < 1000; ++i) {
        atomic_fetch_add(&counter, 1);
    }
    return NULL;
}

int main() {
    pthread_t thread1, thread2;

    pthread_create(&thread1, NULL, increment_counter, NULL);
    pthread_create(&thread2, NULL, increment_counter, NULL);

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    printf("Counter value: %d\n", atomic_load(&counter));

    return 0;
}

这个例子创建了两个线程,每个线程分别递增一个原子变量counter的值1000次。使用atomic_fetch_add函数来保证原子递增操作,而使用atomic_load函数来获取counter的当前值。

编译并运行上述代码,可以看到输出的Counter value的值为2000,即两个线程各自递增1000次:

wjr@WPF3N0KZ3:~/practice$ ./a.out 
Counter value: 2000
文章来源:https://blog.csdn.net/weixin_42692164/article/details/135110203
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。