zoukankan      html  css  js  c++  java
  • linux自旋锁

    #include<linux/fs.h>
    #include<linux/sched.h>
    #include<linux/kthread.h>
    #include<linux/module.h>
    #include<linux/delay.h>
    static int i=0,j=100;
    struct task_struct *MyThread1=NULL;
    struct task_struct *MyThread2=NULL;
    static int myVar = 0;
    static int count = 0;
    spinlock_t lock;
    static void setMyVar(int input)
    {
            spin_lock(&lock);
            if(count)
            {
                printk("busy setMyVar ");
            }
            count++;
        myVar = input;
        printk("setMyVar is %d ",myVar);
        spin_unlock(&lock);
        count--;
    }
    static int getMyVar(void)
    {
        int res = 0 ;
            spin_lock(&lock);
            if(count)
            {
                printk("busy setMyVar ");
            }
            count++;
        res = myVar;
        printk("getMyVar is %d ",res);
        spin_unlock(&lock);
        count--;
        return 0;
    }
    static int print1(void *data)
    {
        while(!kthread_should_stop())
        {
            printk("this is thread1...... ");
            getMyVar();
            setMyVar(i);
            ssleep(1);
            i++;
        }
        return 0;
    }
    static int print2(void *data)
    {
        while(!kthread_should_stop())
        {
            printk("this is thread2...... ");
            getMyVar();
            setMyVar(j);
            ssleep(1);
            j++;
        }
        return 0;
    }

    static int __init hello_init(void){
        spin_lock_init(&lock);
        MyThread1 = kthread_run(print1,NULL,"mythread1");
        MyThread2 = kthread_run(print2,NULL,"mythread2");
        return 0;
    }
    static void __exit
    hello_exit(void){
        if(MyThread1)
        {
            printk("kthread1 stop.... ");
            kthread_stop(MyThread1);
            MyThread1=NULL;
        }
        if(MyThread2)
        {
            printk("kthread2 stop.... ");
            kthread_stop(MyThread2);
            MyThread2=NULL;
        }
            
    }
    module_init(hello_init);
    module_exit(hello_exit);
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("Valerie Henson val@nmt.edu");
    MODULE_DESCRIPTION(""Hello, world!" minimal module");
    MODULE_VERSION("printk");
  • 相关阅读:
    spring applicationContext.xml中<beans>中属性概述
    ES6新特性
    JavaWeb工程 目录结构
    web项目目录结构
    关于 eclipse启动卡死的问题 解决方法
    eclipse 僵死/假死 问题排查及解决
    Ajax的text/plain、application/x-www-form-urlencoded和application/json
    js的等值比较规则
    jsp页面中注释 <!-- --> 和<%-- --%> 的区别
    Spring的配置文件ApplicationContext.xml配置头文件解析
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6757728.html
Copyright © 2011-2022 走看看