题主对 lock 理解有误。 lock 是保证同一段代码(注意是“同一段代码”),多个线程每次只能有一个线程进入临界区的。 你分别在线程1和线程2各自的代码里加锁是不能够保证互斥的,因为线程1永远不会去执行线程2里你加锁的那段代码,同理线程2也一样。 你应该使用信号量 System.Threading.Semaphore 来保证互斥。