LibUsbDotNet中的USB通知事件是不是线程安全?

使用LibUsbDotNet做了一个项目,测试的时候测试人员做了一个用例就是快速插拔USB。因为程序中对USB设备的打开和关闭都是在USB通知事件中做的,所以如果USB插拔通知事件不是线程安全的,那么在多线程中关闭和打开设备的顺序就无法保证,因此做了一个小实验来测试是否是线程安全的。

首先需要添加引用:LibUsbDotNet.dll

using LibUsbDotNet;

using LibUsbDotNet.DeviceNotify;



class Program

    {

        //USB插拔通知事件

        static IDeviceNotifier DevNotifier;

        static int n = 0;

       

        static void Main(string[] args)

        {

            DevNotifier = DeviceNotifier.OpenDeviceNotifier();

            DevNotifier.Enabled = true;

            DevNotifier.OnDeviceNotify += DevNotifier_OnDeviceNotify;



            while (!Console.KeyAvailable)

                Application.DoEvents();

        }



        private static void DevNotifier_OnDeviceNotify(object sender, DeviceNotifyEventArgs e)

        {

            n++;

            for(int i=0;i <0xffff;i++)

            {

                for (int j = 0; j < n; j++)

                    Console.Write("\t");

                

                Console.WriteLine(i.ToString("X4") + " " + n.ToString());

            }

        }

    }

运行如下:

LibUsbDotNet中的USB通知事件是不是线程安全?

控制台输出被覆盖掉了。不过能很明显的看见,当快速插拔USB的时候,是1、2、3、4按顺序执行的。也就是说当多个USB插拔事件发生的时候,事件是线程排队的。因此是线程安全的。

你可能感兴趣的:(线程安全)