Mình từng gặp một issue khá giống của bạn ở 1 dự án cũ, nhưng mà hồi đấy data của mình là từ module spi gửi lên. Cách giải quyết ở đây là bạn phải tạo ra một buffer để lưu dữ liệu nhé, còn cách tổ chức buffer kiểu gì thì tùy bạn. Hồi đó mình tạo ra 1 mảng để lưu dữ liệu đọc từ thread xử lý SPI -> lưu dữ liệu và mảng, bật cờ check flag on lên cho phần tử array chứa data (tất nhiên là phải có lock mutex khi ghi dữ liệu). Sau đó thread xử lý data sẽ quét cái mảng array chứa data kia, phần tử nào có flag on thì nghĩa là chứa dữ liệu mà mình sẽ lấy nó ra (dùng mutex lock khi đọc nhé), sau khi xử lý xong thì trả cờ flag về off để thằng thread đọc có thể lưu data tiếp theo. Lưu ý nếu trường hợp tốc độ ghi luôn lớn hơn tốc đọc thì phải có cơ chế xử lý để chống tràn buffer nhé.