I have a Python service that uses Python's virtual threads (threading.Thread) to handle requests. There is a shared singleton functionality that all threads are trying to access, which is protected using threading.Lock. g_lock = threading.Lock() def my_threaded_functionality(): try: g_lock.acquire() # ... Do something with a shared resource ... finally: g_lock.release() In the docs of threading.Lock.acquire, there is no mentioning of fairness, whereas, in asyncio's asyncio.Lock.acquire, they mention that the lock is fair. As I want to prevent starvation of threads, and want to preserve the order of the tasks the same as they have arrived, I would go for asyncio's Lock if they didn't mention that the locks are not thread safe. The question is whether it should be an issue also with Python's virtual "threads". Continue reading...