首页 > 代码库 > LibUsbDotNet中的USB通知事件是不是线程安全?

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());            }        }    }

运行如下:

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