num()方法应该是你要去多线程处理的业务逻辑,在main方法中,由于循环调用num方法时没有加锁,会出现第一个线程还未调用num(lt_num2)时,已经有多个线程将lt_num2进行了++,导致第一个线程调用num(lt_num2)时,lt_num2实际并不是1。需要在 lt_num2=i 前加锁,调用num()方法后再释放锁。
您好,已经解决,问题在于调用num(lt_num2);lt_num2 copy引用时(调用方法都会将参数复制一份引用/值传递到调用方法)主线程不断修改lt_num2的指向,如果多个子线程在下个修改之前成功复制了引用就会导致打印同样的值