2020-08-30 常用函数记录

2020-08-31  本文已影响0人  Wonton_skin

1、判断是否为字符、数字

int isalpha ( int c );  是否为字符
int isdigit ( int c );   是否为数字
int isalnum ( int c );  是否为字符或者数字

2、字符转数字、数字转字符

int stoi (const string& str, size_t* idx = 0, int base = 10);
string to_string (int val);

3、将容器内元素反转

#include <algorithm> // std::reverse
std::vector myvector;
for(int i=1; i<10; ++i) myvector.push_back(i); // 1 2 3 4 5 6 7 8 9
std::reverse(myvector.begin(), myvector.end()); // 9 8 7 6 5 4 3 2 1

4、信号量(Posix)

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
int sem_post(sem_t *
sem);
Link with -pthread.

5、互斥锁(Posix)

#include <pthread.h>

pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *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);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

PS:多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量

6、class mutex 互斥锁 (C++11)

class mutex;
void lock();    // Member functions
void unlock(); 
bool try_lock();

std::lock_guard 自动释放锁

在构造函数中进行加锁,析构函数中进行解锁。
注意:作用域结束自动析构并解锁,不能中途解锁,必须等作用域结束才解锁。

std::unique_lock 自动释放锁

unique_lock允许延迟锁定、锁定的有时限尝试、递归锁定、所有权转移和与条件变量一同使用。
unique_lock具有 lock_guard 的所有功能,同时又具有其他方法,更强灵活方便,其特点如下:
->创建时可以不锁定(通过指定第二个参数为std::defer_lock),而在需要时再锁定
->可以随时加锁解锁
->作用域规则同 lock_grard,析构时自动释放锁
->不可复制,可移动
->条件变量需要该类型的锁作为参数(此时必须使用unique_lock)

example链接
https://www.jianshu.com/p/bc2bbda63735

PS:c++11中有 mutex (互斥量),有 condition_variable (条件变量),并没有 semaphore (信号量)

7、

上一篇下一篇

猜你喜欢

热点阅读