Thanks for reply. I still have the suspect that things are as you say, but perhaps my situation is more complex. I asyncronously manage a bluetooth device and I work with the AsyncStreams library. Then I have to send these data to Internet, and I also successfully use the HttpUtils stuff. Everything is ok, in ideal conditions, and program perfectly works. The problem is that "event concatenation", in case of errors in communication, may produce situations that will block the entire process. In practice, the bluetooth process must not be influenced by the Internet posting, that may fail, for unpredictable reasons. In case of unsuccessful internet posting, the bluetooth process will and must continue to acquire data. So I decided, hoping to be right, to separate the two processes: the bluetooth process will fill an array of data, and the HttpUtils process will separately Post the data. A global "pointer" will manage the data to send to Internet. From this derives my request on "shared data". Supposing that we have a GlobalData array, a B_Process for bluetooth and an I_Process for internet posting, what I need is: Inside B_Process receive data event, I must "lock" the GlobalData to allow "thread safe pushing" new data in it, and updating the global variable which indicates how many data are still to be sent. Similarly the I_Process should "pop" the data to send and, upon success, update GlobalData and the global pointer. I don't know whether I miss something, as I said, but there is no documentation on the threading library and on the meaning of the Lock, Sleep parameters and on the Threading function. Of course I hope to be wrong. Thanks anyway for your attention.