We study the problem of thread allocation in asynchronous distributed real-time and embedded systems. Each distributed node handles a limited set of resources, in particular a limited thread pool. Different methods can be concurrently invoked in each node, either by external agents or as a remote call during the execution of a method. In this paper we study thread allocation under a WaitOnConnection strategy, in which each method activation of a nested call uses a new thread. We study protocols that control the allocation of threads guaranteeing the absence of deadlocks. First, we introduce a computational model in which we formally describe the different protocols and their desired properties. Then, we study two scenarios: a single agent performing sequential calls, and multiple agents with unrestricted concurrency. For each scenario we present (1) algorithms to compute the minimum amount of resources to avoid deadlocks, and (2) run-time protocols that control the allocation of these resources.