当前位置: 首页 > news >正文

佛山建网站公司做竞价可以让网站提高快速排名吗

佛山建网站公司,做竞价可以让网站提高快速排名吗,软件开发自学入门教程,对网站建设展望信号同步机制封装 Lock类信号量——sem类初始化信号量sem_init()销毁信号量sem_destory()对信号量进行P操作sem_wait()对信号进行V操作sem_post() 互斥锁——locker类初始化互斥量pthread_mutex_init()销毁互斥量pthread_mutex_destroy()给互斥锁加锁pthread_mutex_lock()解锁互… 信号同步机制封装 Lock类信号量——sem类初始化信号量sem_init()销毁信号量sem_destory()对信号量进行P操作sem_wait()对信号进行V操作sem_post() 互斥锁——locker类初始化互斥量pthread_mutex_init()销毁互斥量pthread_mutex_destroy()给互斥锁加锁pthread_mutex_lock()解锁互斥量pthread_mutex_unlock() 条件变量——cond类初始化条件变量pthread_cond_init()销毁条件变量对象pthread_cond_destory()唤醒线程pthread_cond_broadcast()阻塞线程pthread_cond_wait()发送信号通知线程pthread_cond_signal() Lock类 信号量——sem类 信号量是一种特殊的变量它只能取自然数并且只支持两种操作P(wait)和V(signal) P 操作会使得信号量的值减 1如果此时信号量的值小于 0则调用进程或线程会被阻塞等待其他进程或线程对信号量进行 V 操作使得信号量的值大于 0此时阻塞的进程或线程才能继续执行 V 操作会使得信号量的值加 1如果此时信号量的值小于等于 0则会唤醒阻塞在该信号量上的某个进程或线程 信号量的取值可以是任何自然数根据初始值的不同可以分为两类 二进制信号量指初始值为 1 的信号量此类信号量只有 1 和 0 两个值通常用来替代互斥锁实现线程同步 计数信号量指初始值大于 1 的信号量当进程中存在多个线程但某公共资源允许同时访问的线程数量是有限的这时就可以用计数信号量来限制同时访问资源的线程数量 根据使用场景的不同信号量也可以分为两类 无名信号量也被称作基于内存的信号量只可以在共享内存的情况下比如实现进程中各个线程之间的互斥和同步命名信号量通常用于不共享内存的情况下比如进程间通信 在本项目中主要实现的是线程同步只需要使用无名信号量主要使用以下几个函数 初始化信号量sem_init() include semaphore.h int sem_init(sem_t *sem,int pshared,unsignedint value) //初始化一个信号量sem指向要初始化的信号量的指针 pshared指定信号量的共享方式。如果值为 0则信号量将在进程内部共享。如果值为非 0则信号量可以在不同进程之间共享需要使用共享内存 value指定信号量的初值 return成功则返回0否则返回-1销毁信号量sem_destory() include semaphore.h int sem_destroy(sem_t *sem) //销毁一个信号量sem指向要销毁的信号量的指针 return成功返回0否则返回-1对信号量进行P操作sem_wait() include semaphore.h int sem_wait(sem_t *sem) //对信号量进行 P 操作如果信号量的值小于等于 0则会阻塞当前线程sem指向要操作的信号量的指针 return成功返回0否则返回-1对信号进行V操作sem_post() include semaphore.h int sem_post(sem_t *sem) //对信号量进行 V 操作如果信号量的值小于等于 0则会唤醒阻塞在该信号量上的某个线程sem指向要操作的信号量的指针 return成功返回0否则返回-1互斥锁——locker类 互斥锁也称互斥量,可以保护关键代码段,以确保独占式访问.当进入关键代码段,获得互斥锁将其加锁;离开关键代码段,唤醒等待该互斥锁的线程 互斥量是一种用于保护临界区的同步机制可以确保同一时刻只有一个线程访问共享资源。当一个线程访问共享资源时需要先获取互斥量的锁其他线程需要等待该锁释放才能继续执行 互斥量不是为了消除竞争实际上资源还是共享的线程间也还是竞争的只不过通过这种“锁”机制就将共享资源的访问变成互斥操作也就是说一个线程操作这个资源时其它线程无法操作它从而消除与时间有关的错误。但是这种锁机制不是强制的互斥锁实质上是操作系统提供的一把“建议锁”又称“协同锁”建议程序中有多线程访问共享资源的时候使用该机制 因此即使有了mutex其它线程如果不按照这种锁机制来访问共享数据的话依然会造成数据混乱。所以为了避免这种情况所有访问该共享资源的线程必须采用相同的锁机制 初始化互斥量pthread_mutex_init() include pthread.h int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) //初始化互斥量mutex指向要初始化的互斥量的指针 attr指向互斥量属性对象的指针通常设置为 NULL return成功则返回0否则返回一个正整数的错误码销毁互斥量pthread_mutex_destroy() include pthread.h int pthread_mutex_destroy(pthread_mutex_t *mutex) //销毁互斥量mutex指向要销毁的互斥量的指针 return成功则返回0否则返回一个正整数的错误码给互斥锁加锁pthread_mutex_lock() include pthread.h int pthread_mutex_lock(pthread_mutex_t *mutex) //给互斥量加锁如果互斥量已经被锁住则阻塞当前线程直到互斥量被解锁mutex指向要加锁的互斥量的指针 return成功则返回0否则返回一个正整数的错误码解锁互斥量pthread_mutex_unlock() include pthread.h int pthread_mutex_unlock(pthread_mutex_t *mutex) //解锁互斥量如果有等待该互斥量的线程则唤醒其中的一个线程mutex指向要加锁的互斥量的指针 return成功则返回0否则返回一个正整数的错误码条件变量——cond类 条件变量提供了一种线程间的通知机制,当某个共享数据达到某个值时,唤醒等待这个共享数据的线程 条件变量利用线程间共享的全局变量进行同步主要包括两个动作一个线程等待条件变量的条件成立而挂起;另一个线程使条件成立给出条件成立信号。为了防止竞争条件变量的使用总是和一个互斥量结合在一起 初始化条件变量pthread_cond_init() include pthread.h int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) //初始化条件变量对象设置相关属性cond指向条件变量对象的指针 attr指向线程条件属性对象的指针。一般为 NULL return成功则返回0失败返回错误号销毁条件变量对象pthread_cond_destory() include pthread.h int pthread_cond_destroy(pthread_cond_t *cond) //销毁条件变量对象释放资源cond指向条件变量对象的指针 return成功则返回0失败返回错误号唤醒线程pthread_cond_broadcast() 函数以广播的方式唤醒所有等待目标条件变量的线程 include pthread.h int pthread_cond_broadcast(pthread_cond_t *cond) //唤醒所有在条件变量上等待的线程cond指向条件变量对象的指针 return成功则返回0失败返回错误号阻塞线程pthread_cond_wait() 函数执行时,先把调用线程放入条件变量的请求队列,然后将互斥锁mutex解锁,当函数成功返回为0时,互斥锁会再次被锁上. 也就是说函数内部会有一次解锁和加锁操作 include pthread.h int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) //让当前线程阻塞在条件变量上等待唤醒cond指向条件变量对象的指针 mutex指向互斥锁对象的指针用于保护条件变量 return成功则返回0失败返回错误号发送信号通知线程pthread_cond_signal() pthread_cond_signal 只会通知一个等待该条件变量的线程如果有多个线程在等待则只有一个线程会收到通知其余线程还会继续等待直到下一次收到信号 必须在已经获得与条件变量相关的互斥锁之后才能调用该函数 如果没有等待该条件变量的线程调用该函数也不会产生任何作用 include pthread.h int pthread_cond_signal(pthread_cond_t *cond)cond指向条件变量的指针 return成功则返回0失败返回错误号锁机制的功能 锁机制用来实现多线程同步通过锁机制确保任一时刻只能有一个线程能进入关键代码段 为便于实现同步类的RAII机制(“Resource Acquisition is Initialization”直译过来是“资源获取即初始化”)该项目在pthread库的基础上进行了封装实现了类似于C11的mutex标准库功能 ———————————————— 源码 /****************locker.h*******************/ #ifndef LOCKER_H #define LOCKER_H#include exception #include semaphore.h #include pthread.hclass sem { public:sem(int value 0) {if (sem_init(m_sem, 0, value) ! 0) {throw std::exception();}}~sem() {sem_destroy(m_sem);}bool wait() {return sem_wait(m_sem) 0;}bool post() {return sem_post(m_sem) 0;} private:sem_t m_sem; };class locker { public:locker() {if (pthread_mutex_init(m_mutex, NULL) ! 0) {throw std::exception();}}~locker() {pthread_mutex_destroy(m_mutex);}bool lock() {return pthread_mutex_lock(m_mutex);}bool unlock() {return pthread_mutex_unlock(m_mutex);}pthread_mutex_t* get() {return m_mutex;} private:pthread_mutex_t m_mutex; };class cond { public:cond() {if (pthread_cond_init(m_cond, NULL) ! 0) {throw std::exception();}}~cond() {pthread_cond_destroy(m_cond);}bool wait(pthread_mutex_t* m_mutex) {int ret pthread_cond_wait(m_cond, m_mutex);return ret 0;}bool timewait(pthread_mutex_t* m_mutex, struct timespec t) {return pthread_cond_timedwait(m_cond, m_mutex, t);}bool signal() {return pthread_cond_signal(m_cond) 0;}bool broadcast() {return pthread_cond_broadcast(m_cond) 0;} private:pthread_cond_t m_cond; };#endif/*测试locker类代码 // 生产者线程函数 void* producer(void* arg) {block_queueint* queue static_castblock_queueint*(arg);for (int item 0; item 20; item) {queue-push(item);LOG_INFO(生产者产生数据i %d, item);usleep((rand() % 5 1) * 50000);}return nullptr; }// 消费者线程函数 void* consumer(void* arg) {block_queueint* queue static_castblock_queueint*(arg);for (int item 0; item 20; item) {queue-pop(item);LOG_INFO(消费者处理数据i %d, item);}return nullptr; }int main() {block_queueint queue;pthread_t tid_prod, tid_cons;pthread_create(tid_prod, nullptr, producer, queue);pthread_create(tid_cons, nullptr, consumer, queue);pthread_join(tid_prod, nullptr);pthread_join(tid_cons, nullptr);return 0; } */
http://www.w-s-a.com/news/889191/

相关文章:

  • 普兰店网站建设一般做网站什么价格
  • 网站建设的发展目标甘肃网站设计公司
  • 常州西站建设规划室内装修设计学校哪里好
  • 大连网站制作选择ls15227如何编辑网站
  • 网站发稿平台迪士尼网站是谁做的
  • 常州有哪些好的网站建设案例wordpress 360 插件
  • 模板网站有后台么柳城网站建设
  • 地方门户网站制作一级做c爱片的网站
  • 自己上传图片做动漫图网站北京福田汽车
  • 一级a做爰片免费网站录像ps做网站图片水印
  • 网页广告投放成都优化推广公司
  • 网站开发 印花税网页制作站点
  • 创建个人网站有什么好处国外建站系统
  • 桂林学校网站制作2018年网站设计公司
  • 建网站不想用怎样撤销搜狗收录提交入口网址
  • 做简单网站需要学什么软件有哪些南通优普网站建设
  • 网站排版尺寸湖北交投建设集团集团网站
  • 南京网站设计公司有哪些公司看动漫是怎么做视频网站
  • vs做网站怎么做窗体怎么在电脑上自己做网站吗
  • 做网站应该学什么网站编程 外包类型
  • 双鱼儿 网站建设站群系统哪个好用
  • 怎样自己做刷赞网站电商设计需要学什么软件有哪些
  • 关注城市建设网站居众装饰
  • 网站建设的语言优化企业网站
  • 成都旅游网站建设规划女性门户资讯类网站织梦dedecms模板
  • 二手车为什么做网站网站建设合作合同范文
  • 网站建设维护和网页设计做网站都需要服务器吗
  • 成都网站设计报告书系统平台
  • 怎样进行网站推广wordpress微博图床
  • 做一个平台 网站服务器搭建网架公司股价