diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index c014e4a..06975f8 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -746,6 +746,13 @@ public static function bootEnvironment() {
     // Use httponly session cookies.
     ini_set('session.cookie_httponly', '1');
 
+    // Ensure a precision value of at least 14.
+    // It is vital that an appropriate precision level is set so that reliable
+    // comparisons of timestamps can be made.
+    if (ini_get('precision') < 14) {
+      ini_set('precision', 14);
+    }
+
     // Set sane locale settings, to ensure consistent string, dates, times and
     // numbers handling.
     setlocale(LC_ALL, 'C');
diff --git a/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php b/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php
index 2024272..89d06a5 100644
--- a/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php
+++ b/core/lib/Drupal/Core/Lock/DatabaseLockBackend.php
@@ -33,6 +33,7 @@ class DatabaseLockBackend extends LockBackendAbstract {
   public function __construct(Connection $database) {
     // __destruct() is causing problems with garbage collections, register a
     // shutdown function instead.
+    parent::__construct();
     drupal_register_shutdown_function(array($this, 'releaseAll'));
     $this->database = $database;
   }
diff --git a/core/lib/Drupal/Core/Lock/LockBackendAbstract.php b/core/lib/Drupal/Core/Lock/LockBackendAbstract.php
index 1b9e194..c9b7c70 100644
--- a/core/lib/Drupal/Core/Lock/LockBackendAbstract.php
+++ b/core/lib/Drupal/Core/Lock/LockBackendAbstract.php
@@ -29,6 +29,19 @@
   protected $locks = array();
 
   /**
+   * Constructs a new lock backend.
+   */
+  public function __construct() {
+    // It is vital that an appropriate precision level is set or the process
+    // that holds the lock and tries to re-acquire it will fail.
+
+    // Ensure a precision value of at least 14.
+    if (ini_get('precision') < 14) {
+      throw new \Exception('Precision level less than 14 detected.');
+    }
+  }
+
+  /*
    * Implements Drupal\Core\Lock\LockBackedInterface::wait().
    */
   public function wait($name, $delay = 30) {
diff --git a/core/tests/Drupal/Tests/Core/Lock/LockBackendAbstractTest.php b/core/tests/Drupal/Tests/Core/Lock/LockBackendAbstractTest.php
index 23ff1e3..9cca749 100644
--- a/core/tests/Drupal/Tests/Core/Lock/LockBackendAbstractTest.php
+++ b/core/tests/Drupal/Tests/Core/Lock/LockBackendAbstractTest.php
@@ -27,6 +27,13 @@ protected function setUp() {
   }
 
   /**
+   * Tests the minimum precision.
+   */
+  public function testMinimumPrecision() {
+    $this->assertTrue(ini_get('precision') >= 14);
+  }
+
+  /**
    * Tests the wait() method when lockMayBeAvailable() returns TRUE.
    */
   public function testWaitFalse() {
