doc/src/platforms/atomic-operations.qdoc
changeset 0 1918ee327afb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/src/platforms/atomic-operations.qdoc	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+    \page atomic-operations.html
+    \title Implementing Atomic Operations
+    \brief A guide to implementing atomic operations on new architectures.
+
+    \ingroup best-practices
+    \ingroup qt-embedded-linux
+
+    Qt uses an optimization called \l {Implicitly Shared
+    Classes}{implicit sharing} for many of its value classes.
+
+    Starting with Qt 4, all of Qt's implicitly shared classes can
+    safely be copied across threads like any other value classes,
+    i.e., they are fully \l {Reentrancy and Thread-Safety}{reentrant}.
+    This is accomplished by implementing reference counting
+    operations using atomic hardware instructions on all the
+    different platforms supported by Qt.
+
+    To support a new architecture, it is important to ensure that
+    these platform-specific atomic operations are implemented in a
+    corresponding header file (\c qatomic_ARCH.h), and that this file
+    is located in Qt's \c src/corelib/arch directory. For example, the
+    Intel 80386 implementation is located in \c
+    src/corelib/arch/qatomic_i386.h.
+
+    Currently, Qt provides two classes providing several atomic
+    operations, QAtomicInt and QAtomicPointer. These classes inherit
+    from QBasicAtomicInt and QBasicAtomicPointer, respectively.
+
+    When porting Qt to a new architecture, the QBasicAtomicInt and
+    QBasicAtomicPointer classes must be implemented, \e not QAtomicInt
+    and QAtomicPointer. The former classes do not have constructors,
+    which makes them POD (plain-old-data). Both classes only have a
+    single member variable called \c _q_value, which stores the
+    value. This is the value that all of the atomic operations read
+    and modify.
+
+    All of the member functions mentioned in the QAtomicInt and
+    QAtomicPointer API documentation must be implemented. Note that
+    these the implementations of the atomic operations in these
+    classes must be atomic with respect to both interrupts and
+    multiple processors.
+
+    \warning The QBasicAtomicInt and QBasicAtomicPointer classes
+    mentioned in this document are used internally by Qt and are not
+    part of the public API. They may change in future versions of
+    Qt. The purpose of this document is to aid people interested in
+    porting Qt to a new architecture.
+*/