C和C++的多脚本编程允许应用程序同时执行多个任务,提高性能和响应能力,然而,设计有效的多脚本系统需要遵守特定的原则以避免种族条件,僵局,数据不一致等问题. 本条概述了由现实世界实例支持的关键设计原则.

1. 尽量减少共享数据

减少线程之间的共享数据会降低同步问题的可能性。当线程运行于独立数据时,锁定机制的需求会减少,从而导致性能更好,代码更简洁。例如,在处理多个请求的网络服务器中,每个线程都会在不共享可变状态的情况下处理其请求数据。

2. 使用适当的同步

当共享数据是必要的时,适当的同步可以确保数据的完整性。技术包括变异、自旋锁和条件变量。 例如,生产者-消费者模型使用变异和条件变量来协调共享缓冲器的存取,防止种族条件和确保数据的一致性。

3. 避免死锁

当线程无限期地等待对方持有的资源时会出现死锁。 为了防止这种情况, 以一致的顺序获取锁, 并尽可能缩短锁期。 例如, 交易获得多个锁的数据库系统; 建立严格的锁购令可以避免循环等待条件 。

4. 可伸缩性的设计

可缩放的多线程应用程序随着线程数量的增加而高效适应。使用线程池来管理资源,避免创建过多线程。例如,服务器应用程序使用线程池来处理进货连接,在高负荷下保持性能.

5. 酌情使用原子行动

原子操作为共享变量提供线性安全更新,而不明确锁定,这些变量对计数器或标牌有用。例如,使用原子获取和添加来加码共享计数器,可以确保正确性,而不会锁定高空。