C语言多线程编程中信号量的使用

说实话,在多个线程中管理红绿灯是相当混乱的。
要使用 C 语言执行此操作,您需要知道什么是信号量。

交通灯是一个整数,指示当前有多少资源可用。
只有两个操作,等待和报告。

对于等待操作,如果资源已经消失,线程将简单地等待。
当资源可用时,整数值减一,线程继续运行。
简单来说,先抢资源,抢不到就躺着等。

信令操作是添加资源以向其他人传达资源可用的信息。
就这样。

在C语言中,信号量用sem_t类型来表示。
要创建交通灯,请使用 sem_init。
第一个参数是指针,第二个参数是初始值,第三个参数通常设置为0。

例如写: c sem_t my_交通灯; sem_init(&my_semaphore, 0, 1 );
这意味着创建一个初始值为1 的信号量,意味着一开始有1 个资源。

操作是sem_wait和sem_post。
sem_wait是上面提到的资源的捕获,sem_post是资源加一。

作为一个小例子,创建一个线程安全计数器。
计数器必须用信号量来保护,否则如果多个线程同时修改它,数据就会混乱。

c 包含 包括 包含 包括
int 计数器 = 0; sem_t 交通灯计数器;
voidincrement_thread(void args){ 而(1 ){ sem_wait(&traffic_light_counter); 计数器++; sem_post(&traffic_light_counter); } 返回空值;
int main(){ sem_init(&traffic_light_counter, 0, 1 ); pthread_t 线程[2 ]; for(int i = 0; i < 2>在这个例子中,计数器的初始值为0,信号量的初始值为1 两个线程做同样的事情,只是不断加一。
由于红绿灯保护柜台,因此结果不会改变。

注意:当信号量用完时,必须使用sem_destroy销毁它,否则资源会被浪费。
最初值得根据需要配置红绿灯,不要盲目这样做。
多线程修改共享资源时,必须使用信号量来同步,否则会出现问题。

就是这样。

c语言windows下写多线程的问题

c语言中怎样创建多线程?

这是一个坑。
多线程死循环,主线程没有结束,后面跟着子线程。
2 02 1 年,Windows系统有1 000个线程同时运行,CPU利用率为1 00%。
不要这样做。
使用互斥体或信号量。