https://www.gravatar.com/avatar/932f1b40c8d0202ce03a0df412bfb0ff?s=240&d=mp

chaomai's Odyssey

译 - Understand `std::atomic::compare_exchange_weak()` in C++11

原文是stackoverflow上的一个关于compare_exchange_weak()问题和相应的答案

Question

1
bool compare_exchange_weak (T& expected, T val, ..);

compare_exchange_weak()是C++11中提供的compare-exchange原语之一。之所以是weak,是因为即使在对象的值等于expected的情况下,也返回false。这是因为在某些平台上的spurious failure,这些平台使用了一系列的指令(而不是像在x86上一样,使用单条的指令)来实现CAS。在这种平台上,context switch, reloading of the same address (or cache line) by another thread等,将会导致这条原语失败。由于不是因为对象的值(不等于expected)导致的操作失败,因此是spurious。相反的,it’s kind of timing issues。

转 - 如何实现一个malloc

{% blockquote 张洋, CodingLabs http://blog.codinglabs.org/articles/a-malloc-tutorial.html 如何实现一个malloc %}

这篇是转自CodingLabs的文章,除了有原文的内容,我加入了自己的一些思考和理解。

{% endblockquote %}

任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字。实际上,malloc只是C的标准库中提供的一个普通函数,而且实现malloc的基本思想并不复杂,任何一个对C和操作系统有些许了解的程序员都可以很容易理解。

C++ Concurrency in Action (3) - Sharing data between threads

C++ Concurrency in Action 3

Problems with sharing data between threads

在同一进程中,线程间的数据共享,不仅仅是便捷,还可能造成问题。

线程间共享数据的问题,全都可以归结到修改数据的顺序。

  • 如果所有数据都是只读的,那么不会有任何问题。
  • 如果一个或多个线程修改它们之间共享的数据,现在的问题可能就会出现。

Invariant(不变条件):关于某个特定的数据结构,始终为真的与君。

Pattern matching相关算法小结

Pattern matching

Pattern matching的算法有很多,这里做一个简单的总结。

问题:给定一个字符串txt[0...n-1]和另一个字符串pat[0...m-1],假设n > m,实现一个函数search(char pat[], char txt[]),完成在txt中找到所有pat出现的位置。