线程同步3

线程同步3

使用条件变量进行线程同步

1
2
3
4
5
6
7
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *restrict cond;
                                   const pthread_condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *restrict cond,
                                     pthread_mutex_t *restrict mutex,
                                     const struct timespec *restrict tsptr);

线程同步1

线程同步1

互斥量mutex

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <pthread,h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex,
                                      const pthread_mutexattr_t *restrict attr);

int pthread_mutex_destroy(pthread_mutex_t *mutex);

int pthread_mutex_lock(pthread_mutex_t *mutex);
//对互斥量加锁,如果已经加锁,线程阻塞直至被解锁
int pthread_mutex_trylock(pthread_mutex_t *mutex);
//如果已经加锁,不会阻塞,而是返回EBUSY
int pthread_mutex_unlock(pthread_mutex_t *mutex);

lambda表达式

lambda表达式

介绍

一个lambda表达式表示一个可调用的代码单元,可以将其理解为一个未命名的内联函数。形式为

1
2
[capture list](parameter list) -> return type { function body}
//必须使用尾置返回

几个特点

  • 必须使用尾置返回
  • 在创建时捕获
  • 只有一行return语句时可省略返回类型,否则默认为void
  • 一般在给算法传递谓词时可以使用