如何确定哪些 Allegro 库函数是线程安全的?

How can I determine which Allegro library functions are threadsafe?

我正在尝试学习如何使用 Allegro 5 游戏编程库。我想知道如何找出哪些库函数是线程安全的。我了解如何使用互斥锁来确保我自己的代码的安全性,但是我不清楚在调用 Allegro 自己的函数时我可能需要使用它们的数量。

Allegro FAQ 说它是线程安全的,links 到 this thread。但是,该线程不是很有帮助,因为第一条评论中的“非常好的文章”link 已经死了 link,评论者的结论似乎是“Allegro 是 大部分线程安全”,没有说明哪些部分可能不是。

ALLEGRO 在内部依赖 OpenGL(默认情况下)作为其图形例程,因此不能保证它们是线程安全的。您可以假设音频也是如此。所有其他函数确实是 thread-safe:

  1. 同步例程(mutex、cond...)
  2. 计时器
  3. 文件系统和 IO

我在程序中所做的是从单个线程进行所有图形调用,并从单个线程进行所有音频调用(不一定相同)。所有其他线程使用 ALLEGRO 同步例程与图形和音频同步。

注意: 只是为了澄清,我的意思是你不应该同时从两个线程中绘制。可以同时从不同线程创建、复制等不同位图,只要您不在屏幕上绘制它们即可。

注2: 我觉得这很明显,但你不应该同时从两个不同的线程写入任何编程语言的任何对象。