summaryrefslogtreecommitdiffstats
path: root/src/corelib/thread/qbasicatomic.h
Commit message (Collapse)AuthorAgeFilesLines
* Add Contact: information in the license headerBradley T. Hughes2012-01-201-0/+1
| | | | | | | | Contact point is the Qt Project, and needs to be included for all new files added to the repository. Change-Id: Id0e7219e1d11a169f1a91439728cbda55ab29eeb Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Silence warning from clangBradley T. Hughes2012-01-201-2/+4
| | | | | | | | | | | | | | | | | | | QBasicAtomicPointer is forward declared as a class, keep the actual declaration of QBasicAtomicInteger and QBasicAtomicPointer as class with all public members (qoldbasicatomic.h does the same). src/corelib/thread/qbasicatomic.h:158:1: warning: 'QBasicAtomicPointer' defined as a struct template here but previously declared as a class template [-Wmismatched-tags] struct QBasicAtomicPointer ^ src/corelib/global/qglobal.h:1861:23: note: did you mean struct here? template <typename T> class QBasicAtomicPointer; ^~~~~ struct Change-Id: I38c59c29d7f796dde772e7f403bbf98b04571a08 Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Add the new QBasicAtomicXXX implementation - no backends yetThiago Macieira2012-01-201-0/+207
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new implementation is API- and ABI-compatible with the old implementation, provided that QBasicAtomicInt isn't used as an argument in a function call or the return value: now, QBasicAtomicInt is a typedef to QBasicAtomicInteger<int>. The new design is based on CRTP: the QGenericAtomicOps template class takes as a template parameter the derived class itself. This way, we implement a "poor man's virtual" without a virtual table and everything is inline. QGenericAtomicOps implements most of the atomics code that is repeated in many classes all over: * Acquire semantics are obtained by placing an acquire barrier after the Relaxed operation * Release semantics are obtained by placing a release barrier before the Relaxed operation * Ordered semantics are obtained by placing an ordered barrier before the Relaxed operation (either way would be fine) * fetchAndStoreRelaxed and fetchAndAddRelaxed are implemented on top of testAndSetRelaxed * ref and deref are implemented on top of fetchAndAddRelaxed It also adds load, loadAcquire, store and storeRelease: the default implementations of loadAcquire and storeRelease operate on a volatile variable and add barriers. There are no direct operators for accessing the value. Each architecture-specific implementation can override any of the functions or the memory barrier functions. It must implement at least the testAndSetRelaxed function. In addition, by specialising one template class, the implementations can allow QBasicAtomicInteger for additional types (of different sizes). At the very least, int, unsigned and pointers must be supported. Change-Id: I6da647e225bb330d3cfc16f84d0e7849dff85ec7 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Copy qbasicatomic.h to qoldbasicatomic.hThiago Macieira2012-01-061-175/+0
| | | | | | Change-Id: I15df58f9dc29189419f8cbc0ce47bf11e9f17cf4 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Update copyright year in license headers.Jason McDonald2012-01-051-1/+1
| | | | | Change-Id: I02f2c620296fcd91d4967d58767ea33fc4e1e7dc Reviewed-by: Rohan McGovern <rohan.mcgovern@nokia.com>
* Move the non-atomic and implicit functions from QBasicAtomicXXXThiago Macieira2011-10-201-65/+0
| | | | | | | | | Now, users of QBasicAtomicInt and QBasicAtomicPointer must be sure to use .load() and .store() to access the values. Change-Id: I6b48ed175618baf387dd38d821bd50e6e93c082e Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Add placeholders for loadAcquire and storeRelease in the atomicsThiago Macieira2011-10-031-0/+10
| | | | | | | | | | | | | This should be replaced later with proper loadAcquire and storeRelease functions in the architectures that require them. The code right now is enough for x86, x86-64 and IA-64. It's probably not good for ARM and MIPS. Change-Id: Iaa28a18cad64772539662439c2c14690ec26940f Reviewed-on: http://codereview.qt-project.org/5029 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
* Update licenseheader text in source files for qtbase Qt moduleJyri Tahtela2011-05-241-17/+17
| | | | | | | Updated version of LGPL and FDL licenseheaders. Apply release phase licenseheaders for all source files. Reviewed-by: Trust Me
* Initial import from the monolithic Qt.Qt by Nokia2011-04-271-0/+230
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12