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");
  • 相关阅读:
    进入用友通:提示"由于文件不可访问,内存磁盘空间不足无法打开ufsystem数据库"...
    HDOJ 1069 Monkey and Banana
    HDOJ 1087 Super Jumping! Jumping! Jumping!
    HDOJ 1209 Clock
    CodeForces Round #185 (Div. 2)A,B,C
    HDOJ 1465 不容易系列之一
    HDOJ 1114 PiggyBank
    HDOJ 1280 前m大的数
    HDOJ 1495 非常可乐
    HDOJ 1284 钱币兑换问题
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6757728.html
Copyright © 2011-2022 走看看