برای این که دسترسی ای که از 2 تا thread به یک متغیر دارند رو بترتیب انجام بدید تا از تداخل عملیات ها جلوگیری بشه باید از std::lock استفاده کنید .
حالا بدی که std::lock داره این هست که باید حتما std::unlock هم بشه بعد از استفاده (مثل new و delete )
حالا کاربرد unique lock این هست که دیگه نیازی به unlock نیست و unlock خودکار انجام میشه (مثل smart pointer ها )