.通过两个线程实现数组倒置,线程一用于循环倒置,线程二用于循环打印。用互斥锁实现同步,
时间: 2024-03-11 18:51:03 浏览: 73
下面是一个使用互斥锁实现两个线程实现数组倒置和打印的示例代码:
```c
#include <stdio.h>
#include <pthread.h>
#define N 10
int array[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
pthread_mutex_t lock;
void *reverse_array(void *arg) {
int i, tmp;
pthread_mutex_lock(&lock);
for (i = 0; i < N / 2; i++) {
tmp = array[i];
array[i] = array[N - i - 1];
array[N - i - 1] = tmp;
}
pthread_mutex_unlock(&lock);
pthread_exit(NULL);
}
void *print_array(void *arg) {
int i;
pthread_mutex_lock(&lock);
printf("Reverse array: ");
for (i = 0; i < N; i++) {
printf("%d ", array[i]);
}
printf("\n");
pthread_mutex_unlock(&lock);
pthread_exit(NULL);
}
int main() {
pthread_t t1, t2;
pthread_mutex_init(&lock, NULL);
pthread_create(&t1, NULL, reverse_array, NULL);
pthread_create(&t2, NULL, print_array, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
pthread_mutex_destroy(&lock);
return 0;
}
```
在上面的代码中,线程一执行数组倒置操作,线程二执行数组打印操作。在两个线程中都使用了 pthread_mutex_lock() 和 pthread_mutex_unlock() 函数对互斥量进行加锁和解锁操作,以保证同一时间只有一个线程能够访问共享资源。注意,在加锁期间,如果另一个线程也想要访问该互斥量,就会被阻塞,直到加锁的线程解锁该互斥量。最终,通过调用 pthread_join() 函数,等待线程结束,释放线程资源,销毁互斥量资源。
阅读全文