为什么你的Linux桌面需要自动壁纸工具?3款神器让桌面焕然一新
2025/12/18 4:51:26
在多线程编程中,并非所有操作都需要加锁。在简单的整数递增操作中,如果编译器优化级别设置较高(如 -O2),整数递增可能是原子操作,无需加锁。然而,当操作变得复杂,如对大型全局链表进行读写操作时,就必须识别关键部分并加以保护。
为了展示数据竞争问题,我们编写了一个计算阶乘的示例程序。以下是关键代码:
// main 函数中初始化互斥锁 printf( "Locking mode : %s\n" "Verbose mode : %s\n", (gLocking == 1?"ON":"OFF"), (gVerbose == 1?"ON":"OFF")); if (gLocking) { if ((ret = pthread_mutex_init(&mylock, NULL))) FATAL("pthread_mutex_init() failed! [%d]\n", ret); } // 线程工作函数 void * worker(void *data) { long datum = (long)data + 1; int N=0; if (gLocking) pthread_mutex_lock(&mylock); /*--- 关键部分开始 */ factorize(N); printf("[Thread #%ld] (factorial)