want to send the latest logs of execution from one thread to another?
I want to read in a non-blocking way, and I want not more than latest N lines being on the way at the same time.
What I want to solve, I have a process that I'm running from a thread, I have a UI that shows the last 30 lines, right now I have a Vec that I use as a ring buffer and lock it with a mutex, but I want to make reading it non-blocking.
I could use a channel, but that would mean the process can dump 1000 lines at once, and then the UI thread would need to read all the 1000 lines instead of 30, and all those lines would need to be stored in the memory.
I wonder if something that I want exists
So how I solved it: I just use try_lock instead of lock. The UI thread doesn't wait on mutexes now (which makes it always smooth) and it always shows the latest data (it probably can delay showing the data if the thread is starving, but it shouldn't be for really long, and it's lesser evil)
Обсуждают сегодня